看起来我可以初始化一个POD静态const成员,但不是其他类型:
struct C { static const int a = 42; // OK static const string b = "hi"; // compile error };
为什么?
解决方法
类定义中的语法初始化程序仅允许使用整数和枚举类型.对于std :: string,它必须在类定义之外定义并在那里初始化.
struct C { static const int a = 42; static const string b; }; const string C::b = "hi"; // in one of the .cpp files
必须在一个翻译单元中定义静态成员才能实现一个定义规则.如果C允许下面的定义;
struct C { static const string b = "hi"; };
C只允许在类声明中将const static或enumeration类型的const静态数据成员定义为快捷方式.无法定义其他类型的const静态数据成员的原因是需要进行非平凡的初始化(需要调用构造函数).