![](/img/trans.png)
[英]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.