根據C++ 1998標準第3.5節的第3節,const引用具有內部鏈接。const引用在C++中有外部鏈接嗎?
的名稱具有命名空間範圍(3.3.5)具有內部連接,如果它是
的對象,參考,功能或功能模板被顯式聲明靜態的名稱或,
一個明確聲明爲const的對象或引用,既沒有明確聲明爲extern也沒有聲明過具有外部鏈接;或
- 匿名聯盟的數據成員。
但爲什麼多重定義衝突編譯下面的代碼時產生?
// a.cpp
const int& a = 1;
int main()
{
return 0;
}
// b.cpp
const int& a = 1;
然後編譯代碼。
$ g++ a.cpp b.cpp
/tmp/ccb5Qi0M.o:(.bss+0x0): multiple definition of `a'
/tmp/ccD9vrzP.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
如果const引用被更改爲const,如下
// a.cpp
const int a = 1;
int main()
{
return 0;
}
// b.cpp
const int a = 1;
它是確定編譯。
你的意思是C++ 1998標準中的措詞有誤導性嗎? – spockwang
@spockwang:我不知道「誤導」,但它確實令人困惑,現在已被澄清。 –
有沒有人有一個很好的例子來使用這樣的引用,並希望它不是默認的文件範圍? – Deduplicator