怎么理解“类的static成员不能声明为const”

CDcolor 2002-02-08 12:20:05
简单问题,请赐教!
...全文
46 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
CDcolor 2002-02-13
  • 打赏
  • 举报
回复
感谢大家的发言,小弟获益匪浅,帖子再留几天,结帖一定加分:)
warrior 2002-02-08
  • 打赏
  • 举报
回复
class ttt
{
const static int i=3;
};//vc.net编译通过
这种做法是符合标准的,但是有些编译器还不支持...
Elminster 2002-02-08
  • 打赏
  • 举报
回复
对,标准中是允许类中声明 static const ,某种意义上说还是推荐的:可以用 static const int 的变量来声明数组大小。VC6 不支持这个特性是个不大不小的 bug 。
hz129 2002-02-08
  • 打赏
  • 举报
回复
类的static成员能声明为const

在VC6中不能用只是VC6对标准的支持问题.
lifanxi 2002-02-08
  • 打赏
  • 举报
回复
事实上
#include <iostream.h>
class A
{
public:
static const int a;
};
const int A::a=3;
void main()
{
A b;
cout << b.a;
}
这样的程序在VC6中是可以通过的。Programming Windows with MFC中也常有这样的代码。
#include <iostream.h>
class A
{
public:
static const int a=3;
};

void main()
{
A b;
cout << b.a;
}
这样的代码VC6中虽然通不过,但VC7中可以。
The C++ Programming Language中好像也说过是可以的。
不知这样算不算是可以在类中使用static 的const型数据。
SlaSk 2002-02-08
  • 打赏
  • 举报
回复
靠,上面打错一个字,漏了好多字,不好意思,修改了再来。
——————————————————————
类的静态成员不能声明为const,我的解答:
类的每个实例都有自己的数据区域,但使用static后不管类生成多少实例(或没有),static成员变量都在同一个的数据区域。
除了在类中声明static变量,还要在类外初始化数据,使用域操作符初始化,例如:
class ConstClass
{
public:
static int m_sInt;
}
int ConstClass::m_sInt=10;
而const数据成员的初始化只能在类构造函数的初始化表中进行,所以。。。
——————————————————————————
分$来。
SlaSk 2002-02-08
  • 打赏
  • 举报
回复
类的静态成员不能声明为const,我的解答:
类的每个实例都有自己的数据区域,但使用static后不管类生成多少实例(或没有),static成员变量都在同一个的数据区域。
除了在类中声明static变量,还要在类外初始化数据,使用与操作符初始化,例如:
class ConstClass
{
public:
static int m_sInt;
}
int m_sInt=10;
而const数据成员的初始化只能在类构造函数的初始化表中进行,所以。。。
——————————————————————————
分$来。
lifanxi 2002-02-08
  • 打赏
  • 举报
回复
新的C++标准中是允许把类的静态成员定义为const的。
VC.NET可以有体现,VC6中编译就通不过。
garfield_82 2002-02-08
  • 打赏
  • 举报
回复
我理解是这样的,不知对不对。首先:把一个类的对象声明为static是为了让它的生存期延长,最一般的用处是用来计数。而如果一个对象被声明为const那么它只能在定义时被初始化,以后任何试图修改它的调用均视为非法,所以把一个static成员声明为const在某种意义上来说是没有意义的。不知道我说的对不对,献丑了。
garfield_82 2002-02-08
  • 打赏
  • 举报
回复
我理解是这样的,不知对不对。首先:把一个类的对象声明为static是为了让它的生存期延长,最一般的用处是用来计数。而如果一个对象被声明为const那么它只能在定义时被初始化,以后任何试图修改它的调用均视为非法,所以把一个static成员声明为const在某种意义上来说是没有意义的。不知道我说的对不对,献丑了。
garfield_82 2002-02-08
  • 打赏
  • 举报
回复
我理解是这样的,不知对不对。首先:把一个类的对象声明为static是为了让它的生存期延长,最一般的用处是用来计数。而如果一个对象被声明为const那么它只能在定义时被初始化,以后任何试图修改它的调用均视为非法,所以把一个static成员声明为const在某种意义上来说是没有意义的。不知道我说的对不对,献丑了。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧