匿名の名前空間で定義されているシンボル(関数と変数)は、staticキーワードのように内部リンケージを使用しないのはなぜですか?関数が外部から見える/アクセスできない場合、外部リンケージを持つ理由は何ですか?匿名名前空間内の関数/オブジェクトに外部リンケージがあるのはなぜですか?
16
A
答えて
37
C++ 03では、内部リンケージを持つ名前はテンプレート引数[*]として使用できませんでした。したがって、名前のない名前空間にあるほとんどのものの名前には、テンプレートでの使用を可能にするための外部リンケージがありました。名前のない名前空間で名前の内部リンケージを明示的に指定するには、名前付きまたはグローバル名前空間と同じstatic
を宣言します。
名前が変更された名前空間の名前は、デフォルトで内部リンケージ(3.5/4)を持ち、内部リンケージを持つ名前をテンプレート引数として使用できます。
[*]タイプの場合、外部リンクが必要です。オブジェクトや関数の場合は、のアドレスがの場合は外部のリンケージが必要ですが、テンプレートの引数としての値の内部リンケージを使用することはOKです。
+3
+1、してください、内部結合がデフォルトであると言うC++ 11標準の段落番号を回答に追加できますか? – Klaim
関連する問題
- 1. 匿名の名前空間内の変数へのアクセス(C++)
- 2. は私が名前空間内で作業する必要がある匿名関数
- 3. C++標準:名前空間スコープのconstexpr変数に内部リンケージがありますか?
- 4. は、私はC++での名前空間の内部または外部の「名前空間を使用して」
- 5. 静的関数を匿名名前空間と外部の間で定義することには何か違いはありますか? C++で
- 6. Visual Studioで匿名の名前空間内の関数名でブレークポイントを設定する方法は?
- 7. 他の名前空間内の名前空間からの関数の使用
- 8. 関数の匿名化/オブジェクト内の名前の削除
- 9. 'using'は名前空間内か外部にあるべきですか?
- 10. (匿名)名前空間、関数、およびヘッダーファイル
- 11. なぜMVA名前空間内のCompareAttributeは、DataAnnotations名前空間ではないのですか?
- 12. 名前空間内にあるクラスのfriend関数の定義。
- 13. なぜ匿名のJavaScript関数に0がありますか?
- 14. 名前空間の内側にあるビュー内の名前空間の外にあるレール部分をどのようにレンダリングしますか?
- 15. 匿名名前空間はすべての名前空間を囲んでいますか?
- 16. 外部ライブラリと名前空間に関する質問
- 17. PHP:名前空間のない別のクラスにある名前空間クラスの外にある関数にアクセスするには?
- 18. clojureがバッククォート内の名前に名前空間修飾子を追加するのはなぜですか?
- 19. Javaの空の匿名の内部クラス
- 20. cppファイルの匿名の名前空間の中にテンプレート関数を持つのは適切ですか?
- 21. 「名前空間」JavaScriptファイル内の関数がドロップダウンリストに入力されないのはなぜですか?
- 22. 名前のイベントハンドラと匿名の関数
- 23. 匿名の名前空間の関数を別の関数から呼び出せないのはなぜですか?
- 24. 名前空間の外部/内部に読み込みがある場合は読み込みますか?
- 25. C++名前(匿名)名前空間定義
- 26. 名前空間スコープ接頭辞なしで名前空間内の一部の機能にアクセスできないのはなぜですか?
- 27. Elixirの名前付き匿名関数
- 28. System.Collectionsは「システム名前空間の名前空間」ですか?
- 29. Javascriptオブジェクトの関数の範囲内で名前空間を維持する
- 30. cのリンケージと比較した、C++のリンケージにおける名前空間の影響は何ですか?
** **外部リンケージはありませんが、内部にはありません。あなたのソースは何ですか? –
おそらくC++ 03標準です。 –
@SteveJessop匿名の名前空間もC++ 03に存在し、内部のリンケージを提供します。 –