c++ - 命名空间中的 const 全局变量

标签 c++

我知道 static const class 成员只能在 header 中初始化。命名空间是否相同?例如,这样写是否有效:

namehuman.hpp

namespace namehuman
{
   string const human("human");
}

main.cpp

#include "namehuman.hpp"
cout << namehuman::human << endl;

我想知道包括头文件在内的所有文件是否都有自己的 string human 拷贝,或者 human 是否是一个真正的全局变量(没有多次复制)。为了避免每个包含文件复制,我必须使用 extern 吗?

最佳答案

常量具有内部链接。因此,任何包含带有常量定义的 header 的编译单元都将拥有自己的对象实例。

根据C++标准(3.5程序和链接)

3 A name having namespace scope (3.3.6) has internal linkage if it is the name of

...

— a non-volatile variable that is explicitly declared const or constexpr and neither explicitly declared extern nor previously declared to have external linkage; or

如果你想要一个带有外部链接的常量,你必须用说明符extern声明它,并在编译单元中定义它。

关于c++ - 命名空间中的 const 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402177/

相关文章:

c++ - 如何在我的 DLL 中调用我的 exe 中定义的函数?

c++ - c++中的 vector 是指针吗?

c++ - 使用标准输入重定向输入

C++ 模板类型特征问题

参数列表中带有省略号的 C++ Lambda

c++ - 在属于我的进程的 z 顺序中找到最高的非子窗口

c++ - 计算 FUNPROB 的概率

c++ - 有没有办法构建 C++ 自定义限定符?

c++ - SDL_Texture 移动动画

c++ - Mysql_num_rows() 段错误