名前付き名前空間内の無名名前空間 質問する

名前付き名前空間内の無名名前空間 質問する

変更を依頼されたコードの一部は次のようになります。

namespace XXX {

namespace {

// some stuff

} // end of unnamed

// Some stuff within the scope of XXX

} // end of XXX

名前のない名前空間を別の名前空間内に埋め込むことの利点があるのか​​、もしあるとしたら、それを理解するのに苦労しており、次のように変更することを検討しています。

namespace {

// some stuff

} // end of unnamed

namespace XXX {

// Some stuff within the scope of XXX

} // end of XXX

ご意見をいただければ幸いです。

ベストアンサー1

実用的な利点もあります。名前のない名前空間は、その中の名前を隠すことができます。異なる翻訳単位

上記のコードは、fooの定義が同じ翻訳ユニット。

main()とfoo()の定義が違う翻訳単位。メイン ファイルに宣言のヘッダーが含まれているため、コンパイルは行われます。ただし、論理的には X::(unnamed namespace)::foo のようなものは存在しないため、リンクは行われません。

おすすめ記事