1. ホーム
  2. c++

[解決済み] 無名名前空間の静的に対する優越性?

2022-05-11 08:37:01

質問

無名名前空間の優位性は? static キーワードは何ですか?

解決方法は?

基本的にはC++03標準の§7.3.1.1/2の項を参照しているのですね。

<ブロッククオート

static キーワードの使用は でのオブジェクトの宣言は非推奨です。 名前空間スコープを使用します。 unnamed-namespaceは、より優れた の代替となります。

なお、この段落はC++11で既に削除されています。 static 関数は 規格に基づく もはや非推奨ではありません

それにもかかわらず、無名の namespace は、静的キーワードより優れています。 static にのみ適用されます。 変数 の宣言と関数にではなく、ユーザー定義の .

以下のコードは、C++で有効です。

//legal code
static int sample_function() { /* function body */ }
static int sample_variable;

しかし、このコードは有効ではありません。

//illegal code
static class sample_class { /* class body */ };
static struct sample_struct { /* struct body */ };

だから、解決策は、無記名(匿名) namespace という、これです。

//legal code
namespace 
{  
     class sample_class { /* class body */ };
     struct sample_struct { /* struct body */ };
}

なぜ無名なのかが説明されるといいのですが namespace が優れている。 static .

<ストライク また、名前空間スコープでオブジェクトを宣言する場合、staticキーワードの使用は非推奨であることに注意してください(Standardによる)。