在类体初始化一个const静态数据成员时,是否需要在类体外定义该成员

hhddzz 2011-02-04 07:24:46
下面是Primer上的文字和代码
-----------------------------------------------------------------------------------
在类体内初始化一个const 静态数据成员时, 该成员必须仍然要被定义在类定义之外。
但是, 因为这个静态数据成员的初始值是在类体中指定的, 所以在类定义之外的定义不能指
定初始值 。
// 头文件 
class Account {
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
};

// 文本文件
const int Account::nameSize; // 必需的成员定义
const char Account::name[nameSize] = "Savings Account";

-------------------------------------------------------------------------------------
我在VS2010里发现,不要红色的部分也可以运行。(而且我还特意输出了nameSize的值。)
...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪人2015 2011-02-12
  • 打赏
  • 举报
回复
只有const静态整型和枚举可以在类中声明并初始化,其他的都不可以。
楼主之所以去掉红字可以那是因为一个很重要的事实。

C++类中的静态成员的真正定义是以类外声明或初始化为准,所以楼主那么做其实就是声明了类中的一个静态成员。而且不会和类中的声明冲突。
Athenacle_ 2011-02-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
我的记忆中,const 静态数据成员可以在部声明并同时定义(一并初始化)


C/C++ code
class Account {
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
};
const char Account::name[nameSize] =……
[/Quote]

+1
TC++PL里有记载
mstlq 2011-02-04
  • 打赏
  • 举报
回复
我的记忆中,const 静态数据成员可以在部声明并同时定义(一并初始化)

class Account {
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
};
const char Account::name[nameSize] = "Savings Account";

这样也是可以的

非const的则必须在类外部定义并且初始化
hhddzz 2011-02-04
  • 打赏
  • 举报
回复
红色没显示出来,就是 const int Account::nameSize; 这一句

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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