[英]C++ standard: do namespace-scoped constexpr variables have internal linkage?
[英]Do inline namespace variables have internal linkage? If not, why does the code below work?
这个问题与此直接相关。 考虑代码:
#include <iostream>
inline namespace N1
{
int x = 42;
}
int x = 10;
int main()
{
extern int x;
std::cout << x; // displays 10
}
显示10
。 如果我删除extern int x;
声明,然后我们得到一个模糊的编译器时间错误
错误:对“ x”的引用不明确
问题:为什么代码与extern int x
声明一起工作,为什么将其删除后又停止工作? 是否因为内联名称空间变量具有内部链接?
否。[basic.link]中没有任何规定会导致x
具有内部链接。 具体来说,“所有其他名称空间都具有外部链接。”,“其他”是指“未命名”。 也许您正在考虑未命名的名称空间 ?
否,该代码有效,因为避免破坏现有的C代码, extern int x;
必须使用C的方式进行工作,换句话说,要为全局命名空间(这就是C中的所有内容)创建局部extern
变量。 然后,当您稍后使用它时,本地声明的extern消除了任何可能的歧义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.