爲什麼在匿名命名空間中定義的符號(函數和變量)與static關鍵字具有內部鏈接?如果某個功能在外面不可見/可訪問,那麼有什麼理由進行外部連接?爲什麼匿名命名空間中的函數/對象有外部鏈接?
16
A
回答
37
在C++ 03中,具有內部連接的名稱被禁止用作模板參數[*]。因此,無名命名空間中大多數事物的名稱都具有外部鏈接以允許其與模板一起使用。通過聲明static
,您可以在未命名的名稱空間中明確給出名稱內部鏈接,與命名空間或全局名稱空間中的相同。
C++ 11中的這兩件事情都改變了 - 默認情況下(3.5/4),未命名名稱空間中的名稱具有內部鏈接,並且可以將具有內部鏈接的名稱用作模板參數。
[*]對於類型,它必須有外部鏈接。對於對象和函數,如果其地址用作模板參數,則它必須具有外部鏈接,儘管可以將其作爲模板參數使用具有內部鏈接的常量整數的值。
+3
+1,請您可以在答案中添加C++ 11標準中的段落號,表示內部鏈接是默認的? – Klaim
相關問題
- 1. 命名空間內的匿名函數
- 2. 從匿名命名空間調用命名命名空間中的函數
- 3. 使用匿名。匿名的名稱空間函數。命名空間範圍
- 4. 匿名命名空間內部/外部的Typedef?
- 5. VC++中的匿名命名空間中的函數範圍是什麼?
- 6. 匿名函數vs命名函數哪個更好,爲什麼
- 7. 匿名命名空間
- 8. 什麼時候匿名命名空間數據被初始化?
- 9. Doxygen/C++:如何鏈接到匿名命名空間變量
- 10. jQuery命名空間使用對象和自我執行匿名函數
- 11. 爲什麼scala有時需要在匿名函數中命名的參數?
- 12. C++命名空間....匿名命名空間是合法的?
- 13. 爲什麼JavaScript中的匿名函數有名字?
- 14. 瞭解對象文字中的JavaScript匿名與命名函數
- 15. 爲什麼沒有Microsoft.Win64命名空間?
- 16. 爲什麼構造函數在未命名的命名空間中失敗?
- 17. 使用命名空間將原型對象分配給對象中的匿名函數,這是未定義的?
- 18. 在JavaScript中,對象和命名空間有什麼區別?
- 19. C++:鏈接命名空間內的外部變量
- 20. Doxygen \ sa在外部命名空間內的鏈接
- 21. 命名匿名函數
- 22. Clojure:命名匿名函數
- 23. 爲什麼匿名函數會丟失對象範圍?
- 24. 爲什麼匿名內部類在外部對象聲明爲最終時調用外部對象
- 25. 嵌套的匿名命名空間?
- 26. 如何將鏈接傳遞給匿名函數的對象?
- 27. 在匿名命名空間和外部定義靜態函數有沒有區別?
- 28. 匿名函數中的參數在命名函數中表示了什麼?
- 29. (匿名)命名空間,函數和頭文件
- 30. 在具有外部鏈接的匿名名稱空間中聲明的實體的示例
**他們不**有外部聯繫,但內部。你的來源是什麼? –
可能是C++ 03標準。 –
@SteveJessop匿名命名空間也存在於C++ 03中,並給出內部連接。 –