1. ホーム
  2. c++

[解決済み] 無名名前空間が静的の代わりとして「優れている」理由とは?重複

2022-12-27 04:10:34

質問

C++標準の$7.3.1.1/2項を読み取ります。

static キーワードの使用は オブジェクトを宣言する場合、static キーワードの使用は推奨されません。 名前空間スコープでオブジェクトを宣言する場合、static キーワードの使用は非推奨です。 は という優れた代替手段を提供します。

なぜ無名の名前空間が優れた代替案と見なされるのか理解できないのですが?その根拠は何ですか?規格がどうなっているかは以前から知っていましたが、この質問に答えるときでさえ真剣に考えたことはありませんでした。 static に対する unnamed namespace の優位性?

で説明したように、ユーザー定義型にも適用できるため、優れているとされているのでしょうか? の回答 ? それとも、私の知らない他の理由もあるのでしょうか?特に、私の回答はそのような理由ですが、標準では何か別の理由があるかもしれないので、これを聞いているのです。

どのように解決するのですか?

  • ご指摘の通り、名前空間は関数やオブジェクトだけでなく、何にでも使えます。
  • グレッグが指摘しているように static はすでにあまりにも多くのことを意味します。
  • 名前空間は、グローバルスコープで可視性を制御するための統一された一貫した方法を提供します。同じもののために異なるツールを使用する必要はありません。
  • 匿名名前空間を使用する場合、関数/オブジェクト名は適切にマングリングされ、マングリング解除後のシンボルテーブルで、静的リンクで "xyz" だけではなく "(anonymous namespace)::xyz" というように表示できるようにします。
  • 下のコメントで指摘されているように、静的なものをテンプレートの引数として使うことは許されませんが、匿名の名前空間では問題ありません。
  • もっと?おそらく、しかし今は何も思いつきません。