なたにとって、望ましいの明示的に名前空間または'を'C++?
-
03-07-2019 - |
質問
使用時C++、名前空間なたにとって、望ましい名前を明示し、このように:
std::cout << "Hello, world!\n";
はなたにとって、望ましい using namespace
:
using namespace std;
cout << "Hello, world!\n";
場希望の場合は後者ではないかと申告しusingsでファイルまたは機能の範囲は?
個人的に好きですから名前を明示してもいいのでタイピングを用いる場合の混合物の名前空間(例えば std
や boost
いい易い。
解決
私がよく利用す using namespace
std&効果がある。他のすべてを使うの明示的に名前空間がない限り使用いることをクラッタのコードです。
にヘッダのことはありませんで使用 using namespace
汚染することなくグローバル名前空間の#を含むソースです。
他のヒント
別タイピングは問題ではありません。の問題を明示的に修飾名は、visual雑誌の種類も数千にのぼります。う面で、C++構文が損なわ.を必要としませんこの悪化により不必要な作りの名前なまき散らすコードを惜しみなくと ::
s.
私Jeff Atwood: 最高のコードをバーコード.これがtrueです。
名前空間内に輸入をよりよく理解できるように、今後の削減きない欠点どの範囲を開設名前空間は、シングル作成ユニット1, 名紛争のすべて表示することで解決できます。
なぜ明示的に名をは(一般)すると読みやすくするためには常に神秘です。の読者は一般的に知らのコードは良いることができるほどで占意味論。がない場合、コードのニーズを固定します。
1) 微:no using
にヘッダー!
私には必ずこちらをご利用の明示的ます。書stdは傷つかないかを明確に見はどこからとなっております。-する場合に有用であ遺産プロジェクトを使用している"文字列","ベクター"などのナンス性の向上にも寄与します。の情報をコードす。
私の原則は明示的に使用して名前空間で、ヘッダおよび通常の使用のコードです。その理由になっているので明示的に明確に定義されているものに限ると、その理由は後で利用が可能です交換から別の名前空間がることが必要になります。すなわちしていくために、どのような使用を開始foo::文字列ではなくstd::stringし更新する必要がある、ヘッダおよび使用中の計算書の置換えではなく、毎のインスタンスstd::string foo::文字列のコードです。
もちろん、その有用性が相対的に高くな授業が居住し、std::名前空間で置換する場合は一クラスだが使用その他stdがあり込曖昧性の問題が、そのほんの一例になります。
using
や using namespace
非常に有用で描画するコードの読みやすくするために-削除を採用。
いずれの場合ではそれが難しく簡単にシンボルからは、お断り輸入では全体のnamespace.
うlimiitの範囲、輸入の名前空間:
void bar() {
// do stuff without vector
{ using std::vector;
// do stuff with vector
}
// do stuff without vector
}
のための"一般に知られている"図書館のように、 std
, に、あえての使用 using namespace std
.ありしていると信じるに足る理由もみなさんのこのコードを知ってこれらの記号です。
としてsidenote、 using
キーワードにも使われていることを示すためには導出クラスでも輸出の過負荷員のスーパークラス.
class A {
void f( A );
void f( bool );
};
class B : public A {
using A::f; // without this, we get a compilation error in foo()
void f(bool);
};
void foo() {
B b;
b.f( A() ); // here's a compilation error when no `using` is used in B
}
私の使用は明示的に名前空間があるのか定義しています。では、読みやすくするためにも、入力が面倒ないと他の開発、ベースラインレベルが親しみを標準図書館です。
は私がフルスペル名前空間は私だけで使用回のように追加速バ算書の場合、または私が使っているいくつかの非標準図書館があります。
この宣言し、名前空間でのファイルの範囲はシンプルだが、混合の名前空間でも意味の宣言に近いので、使用して機能です。
using
で、機能範囲、又はその機能は非常に小さい(多くは、明示的に名前空間
してしまいがちな明示的に輸入の名前を必要とすることできます。cppファイルなので---
使用std::cout;使用std::endl;
など---。
そのように私の名前を使うと簡単に見つけて、コードなウエアを利用します。
の場合を使用してい二つの名前から異なる名前空間はまったくの修時点で利用します。
私がよく利用すの完全修飾名前のヘッダをほとんど使用を用いた名前空間xでもどこでも---