2014-05-13 59 views
4

據我所知有兩種方式來聲明常數變量可見只有在一個文件中: 將靜態常量和常量聲明爲未命名的命名空間有什麼區別?

namespace { const int VARIABLE = 1; } 
:在一個無名的命名空間

  1. 聲明static const int VARIABLE = 1
  2. 聲明它

    那有什麼區別?

+0

'static'在之前的標準C++ 0x中被棄用。但是,對C++ 11標準進行了修正。基本上他們正在做同樣的工作(即靜態鏈接)。 http://stackoverflow.com/questions/4726570/deprecation-of-the-static-keyword-no-more – 101010

回答

3

既然是const,那麼兩者都有內部聯繫,並沒有區別。所以讓我們考慮更有趣的情況,它不是const

在這種情況下,幾乎沒有什麼區別。

從技術上講,第一個將有內部鏈接,所以名稱不能從另一個翻譯單元訪問;第二個將有外部鏈接,但不能從另一個翻譯單元訪問,因爲它的周圍名稱空間不能被命名。

+2

而在這種特殊情況下('const'沒有聲明'extern'),它們實際上都會有內部鏈接... – Angew

+1

在對模板有影響的C++ 98中。只有指向具有外部鏈接的對象的指針纔可以用作非類型模板參數。 – ach

+0

@Angew:好點,我忘了那個細節。 –