簡體   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