2015-10-19 10 views
5

私はsomelseのものにいくつかのC++を統合していましたが、という名前空間を使ってコマンドを使用するという2つの方法を採用しています。C++ 'using namespace'の適切な位置

ソースコードの清潔さについては、どちらが最も正しい解決策ですか?

namespace foo 
{ 
    using namespace bar; 
} 

または

using namespace bar; 

namespace foo 
{ 
} 

おかげであなたの助けのためにたくさん、

T.

答えて

7

2は等価ではありません。最初のケースでは、ネームスペースbarがネームスペースfooにインポートされるため、bar::xごとにfoo::xとしてアクセスできます。後者では、名前空間barがグローバル名前空間(または両方をラップする名前空間)にインポートされ、::xとしてアクセスできます。

可能な限り狭いソリューションを選択することをおすすめします。関数内にのみ名前空間を含めるという点でさえ、あなたは実際にそれを必要とします。あなたが疑わしい場合は、最初のものと一緒に行ってください。

+1

+1「可能な限り狭い」。 'namespace'を使うことはほとんどありません。あなたが望む特定の名前だけを名前空間から使う方が良いでしょう。 –

+0

@TobySpeight確かに。これに対する例外は 'std :: literals'や' std :: placeholders'のような名前空間であり、その全体が含まれるように設計されています。 – Shoe

+0

@Jefffreyは同意しましたが、最初にブーストが得られたので、std ::プレースホルダでさえ地雷になる可能性があります。 std :: literalは唯一安全なものです。 –

0

この質問は既に回答されていますが、私はToby Speightで悩まされている点を繰り返し述べたいと思います。 using namespace barのようなものを書くべきではありません。

namespacesのエイリアシング補助としてusingを使用することをお勧めします。その後、同様

using po = boost::program_options; 

そして

po.notify(vm); 

質問で提案されている二つの選択肢のいずれかを使用するだけの議論やインタビューのために良いです。

+0

"「名前空間バーを使う」のようなものを書くべきではありません。私は全く同意しない。特定の名前空間は 'namespace'を使用してインポートすることを意図しています。他のどの絶対的なものと同じようにプログラミングに固執することができますが、常に例外があります。 – Shoe

+0

http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – gjha

+0

で議論されている点を繰り返し述べています。私の質問にはその議論で答えられません。 私は2人の中でベストプラクティスについて質問していましたが、そのうちの1人が悪い人であるかどうかは分かりませんでした。 – Tambo

関連する問題