専門家向けの簡単な説明: C++11 では、名前のない名前空間を宣言できますinline
。これは冗長に思えます。名前のない名前空間で宣言されたものは、囲んでいる名前空間で宣言されているかのように既に使用されています。
だから私の質問はこれです:言うことはどういう意味ですか
inline namespace /*anonymous*/ {
// stuff
}
そして、それは伝統的なものとどう違うのですか
namespace /*anonymous*/ {
// stuff
}
私たちが C++98 から知っていて、愛しているのは? を使用した場合の異なる動作の例を誰か挙げてもらえますinline
か?
編集:この質問は重複としてマークされているため、明確にするために:名前付きインライン名前空間全般について質問しているわけではありません。私はそこでのユースケースを理解しており、素晴らしいと思います。名前のない名前空間を として宣言することの意味を具体的に尋ねていますinline
。inline
名前のない名前空間は常にTUに対してローカルであるため、シンボルのバージョン管理の合理性は適用されないようです。
余談ですが、名前のない名前空間に関する標準 [7.3.1.1] は次のように述べています。
inline
unnamed-namespace-definitionに表示される場合にのみ表示されます
しかし、これは言語を知らない私の弁護士の目にはトートロジーのように見えます。おまけとして、このちょっとした標準語が実際に何を言っているのか説明できる人はいますか?
編集: Cubbiはコメントでボーナスポイントを主張しました:
標準では、unnamed-namespace-definition は、unnamed-namespace-definitionに表示される場合、 Xに表示されるXに置き換えられたかのように動作すると述べています。
inline