类的静态成员被编译为类范围的全局变量。如何编译const静态成员和静态constexpr成员? 每个.o文件的编译器是否都复制了这个静态成员,否则就完成了?
答案 0 :(得分:3)
C ++ 14 [class.static.data] / 5:
涵盖了这一点命名空间范围内的类的
Static
数据成员具有外部链接。本地类不应具有静态数据成员。
“命名空间作用域中的类”表示不在块范围内的类(也称为“本地类”)。例如这段代码:
void func()
{
class C { static const int x = 5; };
}
是不正确的。
回答你的问题:
每个.o文件的编译器是否复制了这个静态成员,否则就完成了?
通常,如果静态成员在类之外有一个定义,那么它将在对应于该定义位置的目标文件中有一个副本,否则将没有。