的我一直在我公司看到這樣的代碼隨處可見:不必要使用未命名空間C++
namespace {
const MAX_LIMIT = 50;
const std::string TOKEN = "Token";
}
我很困惑,爲什麼你在這裏需要一個匿名的命名空間。一方面,您需要本地翻譯單元MAX_LIMIT
和TOKEN
。但是由於const
的原因,沒有匿名命名空間就已經實現了。 static const
和簡單const
都實現本地翻譯單元。
另一方面,如果文件中的某個地方有一個名稱相同的變量,則沒有命名衝突。
int foo()
{
std::string TOKEN = "MyToken"; // Clash! ::TOKEN vs TOKEN can be used.
}
這將證明匿名命名空間。但是你多長時間需要一個函數中的變量名,這個變量名實際上是由在函數外部聲明的const
變量佔用的?我的答案是從來沒有。所以在實踐中,對我來說,不需要命名空間。任何提示?
我會說一致性:這個'const'規則只適用於整型。 – Quentin
@Quentin Huh?名稱空間範圍內的'const'具有內部連接,除非標記爲'extern',對於所有類型 –
@ M.M我的壞!我不知道我從哪裏回想起,但我也很確定。至少我並不孤單:D – Quentin