簡體   English   中英

為什么匿名名稱空間中的函數/對象具有外部鏈接?

[英]Why do functions/objects inside anonymous namespace have external linkage?

為什么在匿名名稱空間中定義的符號(函數和變量)不像static關鍵字那樣具有內部鏈接? 如果某個功能在外部不可見/不可訪問,那么建立外部鏈接的原因是什么?

在C ++ 03中,禁止將內部鏈接的名稱用作模板參數[*]。 因此,未命名名稱空間中大多數事物的名稱具有外部鏈接,以允許它們與模板一起使用。 您可以通過將其聲明為static來顯式地在未命名的命名空間中提供名稱內部鏈接,這與命名或全局命名空間相同。

兩者都在C ++ 11中發生了變化-未命名的名稱空間中的名稱默認情況下具有內部鏈接(3.5 / 4),具有內部鏈接的名稱可用作模板參數。

[*]對於類型,它必須具有外部鏈接。 對於對象和函數,如果將其地址用作模板參數,則必須具有外部鏈接,盡管例如可以將具有內部鏈接的const整數的用作模板參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM