using
コードをusing namespace
より読みやすくするのに非常に便利です - 混乱を取り除きます。
ただし、シンボルがどこから来たのかを見つけるのが難しくなる場合は、名前空間全体をインポートすることを拒否します.
インポートされた名前空間の範囲を制限しようとしています:
void bar() {
// do stuff without vector
{ using std::vector;
// do stuff with vector
}
// do stuff without vector
}
のような「一般的に知られている」ライブラリについてはstd
、あえて を使用しusing namespace std
ます。このコードを読んでいるすべての人がこれらのシンボルを知っていると信じる理由があります。
補足として、この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
}