C++中不允许使用static/global变量

kla*_*aus 1 c++ cpplint

我在C++类中定义了一个全局变量,如下所示:

std::string VAR = "HELLO_WORLD";
Run Code Online (Sandbox Code Playgroud)

但是cpplint告诉我:

不允许使用静态/全局字符串变量.[runtime/string] [4]

你知道为什么吗?

Bat*_*eba 5

为避免疑问,语言本身允许这样做.

基本上,虽然你使用的静态分析器禁止这个,因为std::string包含一个构造函数,所以语句实际上"做了一些事情".

因此,它需要在函数内部,而不是在全局范围内.

另一方面,

const char* VAR = "HELLO_WORLD";
Run Code Online (Sandbox Code Playgroud)

发出,因为这只不过是将只读const char[]文字赋值给适当的指针.

  • 什么?!在命名空间/全局范围内实例化具有重要成员的类是完全合法的!也许 Cpplint 只是说这违反了谷歌编码约定。 (2认同)