繁体   English   中英

内联名称空间变量是否具有内部链接? 如果没有,为什么下面的代码起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM