如果我编写的代码类似于
#include <string>
class C {
static const std::string MY_SPECIAL_STRING = "hi";
};
我尝试编译它,即使在C ++ 11模式下,g ++也会抱怨:
必须初始化类型为'const std :: string'的静态数据成员 行
为什么我们有这个规则?
我的意思是,我仍然可以“欺骗”并在静态方法中使用静态变量,例如:
#include <string>
class C {
static const std::string& MY_SPECIAL_STRING() {
static const std::string& ss("hi");
return ss;
}
};
这样,我不需要在翻译单元中放置声明,并且我实际上也有相同的东西,尽管语法更加粗糙。