1 class GamePlayer 2 { 3 public: 4 static const int NumTurns = 5; 5 int scores[NumTurns]; 6 }; 7 int main() 8 { 9 const int *pint = &GamePlayer::NumTurns; 10 cout << *pint << endl; 11 12 system("pause"); 13 }
书上说你所看到的是NumTruns的声明而非定义式,而且不去地址的话就不用定义,如果取地址的话就额外定义。但是我在main中取地址也没有错误啊?这是为什么啊?是我那个地方理解错误了?
这个应该是C++标准未明确规定的地方吧
C++ primer上说只要是静态常量成员就可以在类的定义体中初始化,但实际上VC中只允许静态常量整型数据在类中初始化。
C++ primer上说就算是静态常量成员在类的定义体中初始化了,也要在类的定义体之外进行定义,但实际上VC中静态常量整型数据在类中初始化一次就可以了。
谢谢了,也就是说这个跟编译器是有关系的?
@CodingMan: 我认为是这样的,但是我没有在别的编译器上试过。
还是养成习惯,静态成员都不在类定义体中初始化比较好。
effective C++条款2 说的是取private常量的情况,而你的代码中NumTurns是public的
嘿嘿 喔输错了 但是改成private 之后肯定不能访问 啊 那个跟static 什么关系啊?