会社のいたるところで次のようなコードを目にします。
namespace {
const MAX_LIMIT = 50;
const std::string TOKEN = "Token";
}
ここで匿名の名前空間が必要な理由がわかりません。一方では、MAX_LIMIT
ANDのローカル翻訳単位が必要ですTOKEN
。しかし、それはconst
. static const
とシンプルconst
の両方がローカル翻訳単位を達成します。
一方、ファイルのどこかに同じ名前の変数がある場合、名前の衝突はありません。
int foo()
{
std::string TOKEN = "MyToken"; // Clash! ::TOKEN vs TOKEN can be used.
}
それは匿名の名前空間を正当化します。const
しかし、関数の外部で宣言された変数によって実際に既に使用されている変数名が関数内で必要になる頻度はどれくらいですか? 私の答えは決してありません。したがって、実際には、名前のない名前空間は必要ありません。ヒントはありますか?