匿名の名前空間で定義されているシンボル(関数と変数)に、静的キーワードのように内部リンクがないのはなぜですか?関数が外部から表示/アクセスできない場合、外部リンクを使用する理由は何ですか?
質問する
2299 次
1 に答える
37
C++03 では、内部リンケージを持つ名前をテンプレート引数として使用することは禁止されていました [*]。したがって、名前のない名前空間にあるほとんどのものの名前には、テンプレートで使用できるようにするための外部リンケージがありました。static
名前付きまたはグローバルな名前空間と同様に、名前のない名前空間で宣言することにより、名前の内部リンケージを明示的に指定できます。
どちらも C++11 で変更されました -- 名前のない名前空間の名前にはデフォルトで内部リンケージがあり (3.5/4)、内部リンケージを持つ名前はテンプレート引数として使用できます。
[*] 型の場合、外部リンケージが必要です。オブジェクトと関数の場合、そのアドレスがテンプレート引数として使用される場合は、外部リンケージが必要です。ただし、たとえば、内部リンケージを持つ const 整数の値をテンプレート引数として使用することは問題ありません。
于 2012-05-31T11:53:45.777 に答える