名前のない名前空間はstatic
キーワードよりも優れていますか?
43567 次
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
。
于 2010-12-12T16:10:51.273 に答える