C++標準のセクション$ 7.3.1.1/2には次のように記載されています。
名前空間スコープでオブジェクトを宣言する場合、staticキーワードの使用は推奨されません。名前のない名前空間は、優れた代替手段を提供します。
名前のない名前空間が優れた代替と見なされる理由がわかりませんか?根拠は何ですか?私は標準が何を言っているかについて長い間知っていましたが、この質問に答えていたとしても、私はそれについて真剣に考えたことはありませんでした:
answer で説明したように、ユーザー定義型にも適用できるため、優れていると考えられますか?または、私が知らない他の理由もありますか?私はこれを求めています、特にそれが私の答えの理由であるので、標準は他の何かを念頭に置いているかもしれません。
static
はすでに多すぎることを意味します。理由の1つは、static
の意味がすでに多すぎることです(少なくとも3つはカウントできます)。匿名名前空間は型を含むすべてをカプセル化できるため、static
ソリューションよりも優れているようです。
私が考える2つの理由があります:
static
には2つの異なる意味があります。クラススコープでは、クラス全体で共有されることを意味しますが、ファイル/関数スコープでは、可視性/ストレージに影響します...struct
、class
およびtypedef
を宣言できます。ただし、1つ注意してください。委員会はこれについてバックペダルしました:static
はn3225
で非推奨としてマークされなくなりました。
理由が何であれ、彼らは考えを変えました: http://crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/