可能重複:
Unnamed/anonymous namespaces vs. static functions靜態和匿名命名空間
這是完全多餘的,或者可能有一個理由這樣做呢?
namespace {
static void f() {
...
}
}
可能重複:
Unnamed/anonymous namespaces vs. static functions靜態和匿名命名空間
這是完全多餘的,或者可能有一個理由這樣做呢?
namespace {
static void f() {
...
}
}
它對我來說看起來多餘 - 要麼聲明爲靜態,要麼處於匿名名稱空間意味着它具有內部鏈接。
§3.5/ 3:
具有名稱命名空間範圍(3.3.6)具有如果是的名稱內部聯動:
- 變量,函數或函數模板是顯式聲明靜態;
§3.5/ 4:
[...]一個未命名的命名空間或具名命名空間內直接或間接地聲明命名空間具有內部連接。 [...]名稱空間範圍內沒有 上面給出的內部鏈接的名稱與封閉名稱空間具有相同的鏈接,如果它是名稱
- 變量;或
- 一個函數;或
因此,現在它已經有了內部鏈接,因爲它是明確聲明爲靜態的。如果它沒有明確聲明爲靜態的,則它將具有內部鏈接,因爲它是在未命名的名稱空間內聲明的。兩種方式的效果都一樣
請注意,我在這裏關於功能明確答覆 - 有一個幾個模糊的情況下,有一個差異,當你與一個類型的名稱處理(例如,類/結構/聯合)但我不知道任何適用於功能的東西。
就內部聯繫的真正含義而言,這是標準實際上非常直接和清晰的地方之一。這也可能是最好引用的所有三種可能性(3.5節/ 2)的定義:
請注意,上面的斜體與標準中的斜體相匹配,這是它的方式來說明這些句子定義了這些短語在標準的其餘部分中的含義。
看到這一個,它回答了所有:[未命名/匿名命名空間與靜態函數] [1] [1]:http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions – pbhd
@phbd這裏有一條評論,指出未命名的命名空間仍然得到外部聯繫。你知道嗎?你能解釋一下這意味着什麼嗎? – baruch
@baruch:看到我的回答 - 正如標準中的引述所表明的那樣,這意味着發表該評論的人是錯誤的。 –