静态const成员是否有内部链接?

时间:2014-11-06 11:01:38

标签: c++ class static const linkage

类的静态成员被编译为类范围的全局变量。如何编译const静态成员和静态constexpr成员? 每个.o文件的编译器是否都复制了这个静态成员,否则就完成了?

1 个答案:

答案 0 :(得分:3)

C ++ 14 [class.static.data] / 5:

涵盖了这一点
  命名空间范围内的类的

Static数据成员具有外部链接。本地类不应具有静态数据成员。

“命名空间作用域中的类”表示不在块范围内的类(也称为“本地类”)。例如这段代码:

void func()
{
    class C { static const int x = 5; };
}

是不正确的。

回答你的问题:

  

每个.o文件的编译器是否复制了这个静态成员,否则就完成了?

通常,如果静态成员在类之外有一个定义,那么它将在对应于该定义位置的目标文件中有一个副本,否则将没有。