类的const static变量问题

freeicy2007 2012-12-16 11:35:30
C++primier中说const static成员在类定义体中初始化时,该成员仍必须在类的定义体外进行定义,这是啥意思,初始化时不是定义了么,这样不会重定义么
...全文
204 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevermorewish 2012-12-18
  • 打赏
  • 举报
回复
引用 3 楼 popy007 的回复:
class A { public: const static int C = 100; }; 这是一种新的常量静态成员初始化方式,只能够对整数型(char, int等等)变量进行操作。并且这种方式在较老的编译器下是不被支持的。这和静态成员初始化的常规方式不同: class A { public: const static int C; }; ……
++ 最好const int A::C = 100; 写在cpp中
乔巴好萌 2012-12-17
  • 打赏
  • 举报
回复
楼主肯定没写过单件模式 写过单件模式的话 就体会深刻了
yisikaipu 2012-12-17
  • 打赏
  • 举报
回复
引用 9 楼 ZLhy_ 的回复:
还有一种坑爹的用法是这两个的合并,这好像是在C++的2003年标准中的新规定,可以直接在类中定义,这是唯一的可以在类中直接定义的变量声明方式。
那不是定义,是带初始化式的声明
疯狂的红豆 2012-12-17
  • 打赏
  • 举报
回复
const与static两个修饰符都是用来修饰变量的声明形式的,主要是指定变量是存放在哪一个区域内。 类中的const变量如: class myClass { public: const int ival; static int value; const static float = 10.0; myClass(const int i):ival(i){} //参数初始化列表初始化类中的常量 }; ival的初始化必须在构造函数的参数初始化表中做初始化工作,如上。 在类中的static变量是存储在静态区的,这样的变量是不属于哪一个对象的,而是属于整个类的。对于静态的函数只能访问静态的变量或是函数,对于普通函数来说可以放静态或非静态都行。而是静态的变量初始化也有所不同, int myClass::value;//静态变量的值不初始化,编译器自动帮忙初始化为默认的零值,当然也可以 int myClass::value = 20.0; 还有一种坑爹的用法是这两个的合并,这好像是在C++的2003年标准中的新规定,可以直接在类中定义,这是唯一的可以在类中直接定义的变量声明方式。
lee_鹿游原 2012-12-16
  • 打赏
  • 举报
回复
引用 1 楼 taodm 的回复:
为啥不自己编译试一下。
++
taodm 2012-12-16
  • 打赏
  • 举报
回复
为啥不自己编译试一下。
popy007 2012-12-16
  • 打赏
  • 举报
回复
引用 7 楼 ty080725 的回复:
引用 3 楼 popy007 的回复:class A { public: const static int C = 100; }; 这是一种新的常量静态成员初始化方式,只能够对整数型(char, int等等)变量进行操作。并且这种方式在较老的编译器下是不被支持的。这和静态成员初始化的常规方式不同: class A { public: const ……
哪段出问题了?第一段?vc6这么老的compiler不支持的。
ROM__yu 2012-12-16
  • 打赏
  • 举报
回复
引用 3 楼 popy007 的回复:
class A { public: const static int C = 100; }; 这是一种新的常量静态成员初始化方式,只能够对整数型(char, int等等)变量进行操作。并且这种方式在较老的编译器下是不被支持的。这和静态成员初始化的常规方式不同: class A { public: const static int C; }; ……
VC6 出现error C2246: 'C' : illegal static data member in locally defined class.
Binzo 2012-12-16
  • 打赏
  • 举报
回复
引用
类定义体中的static修饰的是成员声明
.
pathuang68 2012-12-16
  • 打赏
  • 举报
回复
yisikaipu 2012-12-16
  • 打赏
  • 举报
回复
引用 楼主 freeicy2007 的回复:
C++primier中说const static成员在类定义体中初始化时,该成员仍必须在类的定义体外进行定义,这是啥意思,初始化时不是定义了么,这样不会重定义么
类定义体中的static修饰的是成员声明,不是定义 声明可以带初始化式 类体外的才是定义,定义也可以带初始化式 关于这个例子,C++标准要求在类体内用带初始化式的声明,类体外用不带初始化式的定义 另外,编译器则不一定完全遵守标准
popy007 2012-12-16
  • 打赏
  • 举报
回复
class A { public: const static int C = 100; }; 这是一种新的常量静态成员初始化方式,只能够对整数型(char, int等等)变量进行操作。并且这种方式在较老的编译器下是不被支持的。这和静态成员初始化的常规方式不同: class A { public: const static int C; }; // 在定义单元中 const int A::C = 100; 这种方式就是常规方式(声明+定义)。但下面的方式是不被允许的,因为它会被看作是重复定义: class A { public: const static int C = 100; }; // 在定义单元中 const int A::C = 100;

64,654

社区成员

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

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