为什么我们不能在类定义中声明静态变量?

时间:2015-07-30 22:51:30

标签: c++ c++11

如果我编写的代码类似于

#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;
  }
};

这样,我不需要在翻译单元中放置声明,并且我实际上也有相同的东西,尽管语法更加粗糙。

0 个答案:

没有答案