c++ - static const 成员是否有内部链接?

标签 c++ class static constants linkage

类的静态成员被编译为类作用域的全局变量。编译的 const 静态成员和静态 constexpr 成员如何? 编译器是否为每个 .o 文件制作此静态成员的拷贝或以其他方式完成?

最佳答案

C++14 [class.static.data]/5 涵盖了这一点:

Static data members of a class in namespace scope have external linkage. A local class shall not have static data members.

“命名空间范围内的类”表示不在 block 范围内的类(又名“本地类”)。例如这段代码:

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

格式错误。


回答你的问题:

Does compiler for every .o file makes copy of this static member or it's done otherwise?

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

关于c++ - static const 成员是否有内部链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26777821/

相关文章:

c++ - timeval 到字符串(在两者之间转换)

c++ - 是否可以像指向函数的指针一样将指向运算符的指针作为参数传递?

c++ - 未命名/匿名命名空间与静态函数

java - 如何调用另一个类中的List类型方法

c++ - 模板类中的模板构造函数必须在类定义中定义?

c# - 类型约束

PHP 类变量声明与赋值失败

c# - 在 C# 中使用静态变量

c# - 关于单例的非静态成员的问题(C#)

java - Scala trait - 是否有 Java 接口(interface)公共(public)静态字段的等价物?