147

名前のない名前空間はstaticキーワードよりも優れていますか?

4

2 に答える 2

154

基本的に、C++03 標準のセクション 7.3.1.1/2 を参照しています。

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

この段落は C++11 で既に削除されていることに注意してください。static関数は標準ごとに非推奨ではなくなりました!

それにもかかわらず、 unnamednamespaceは static キーワードよりも優れています。これは主に、キーワードが変数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 */ };

したがって、解決策は unnamed (aka anonymous)namespaceで、これは次のとおりです。

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

unnamednamespaceが よりも優れている理由が説明されていることを願っていますstatic

また、(標準に従って) 名前空間スコープでオブジェクトを宣言する場合、 static キーワードの使用は推奨されないことに注意してください。
于 2010-12-12T16:10:51.273 に答える