再一次:为什么静态成员变量不能内联声明?

时间:2014-05-27 12:47:29

标签: c++ static-members

我知道这个问题已经被问过,但谷歌搜索我没有找到真正的答案。 我的意思是:静态成员函数(以及非静态成员函数)可以在它们被声明的同时在它们的类中定义。为什么不能为静态成员变量做这个?它不会破坏一个定义规则。这是在标准中指定的吗?如果是的话,背后的原因是什么?

1 个答案:

答案 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>