我知道这个问题已经被问过,但谷歌搜索我没有找到真正的答案。 我的意思是:静态成员函数(以及非静态成员函数)可以在它们被声明的同时在它们的类中定义。为什么不能为静态成员变量做这个?它不会破坏一个定义规则。这是在标准中指定的吗?如果是的话,背后的原因是什么?
答案 0 :(得分:1)
当你这样写:
struct A
{
static int a; //class scope
}
static int b; //namespace scope - static makes b to have internal linkage!
此处,a
尽管声明为static
,但仍有外部链接,而在另一种情况下,b
有内部链接。如果您想要内联a
的定义(如成员函数),那么它必须具有内部链接,否则在多个cpp中包含标头文件将导致多重定义错误。内部链接也完全改变了变量的范围 - 每个翻译单元都有自己的变量a
实例,即在所有翻译单元中都没有a
的单个值。 / p>