C++に関する書籍を読むたびに、「using namespace std」の例が見つかります。'std'以外のC++で役に立つ名前空間
他の名前空間がC++に存在するかどうか知りたいのですが、これは便利ですか?
C++に関する書籍を読むたびに、「using namespace std」の例が見つかります。'std'以外のC++で役に立つ名前空間
他の名前空間がC++に存在するかどうか知りたいのですが、これは便利ですか?
C++標準ライブラリのすべては、std
名前空間(またはstd
のネストされた名前空間)にあります。
他のライブラリはもちろん、他の名前空間を使用しています。使用している他のライブラリのドキュメントを参照して、使用するネームスペースを判断することをお勧めします。
これは、ディレクティブの使用は一般的に悪い考えです。名前空間の個々の名前を使用する宣言を使用する方がはるかに優れています。これは、std
名前空間で特に重要です。 std
名前空間にはよく使われる名前が多くあり、自分の関数やクラスを参照したり、誤って標準ライブラリの関数やクラスを参照しようとすると、解決しにくい問題にぶつかりやすいです。たとえば、これは悪いです:
using namespace std;
cout << "Hello world" << endl;
はこれが優れている:あなたは、あなたのプログラム全体で完全修飾名を使用するときに私の意見で
using std::cout;
using std::endl;
cout << "Hello world" << endl;
、コードは通常クリーナーです。これは、それが明確エンティティから来て、ミスにはあまり余地を残している場所を行います。std::bind
を使用している場合たとえば、それはstd::placeholders::_1
を使用するように鼓動(もちろん、これらの規則のすべての例外は、
std::cout << "Hello world" << std::endl;
ありますしますし、その友人。それusingディレクティブは、関数の内部では、しかし、ではない名前空間スコープであるべきなどusing std::placeholders;
を使用して、ちょうど_1
を参照するコード、_2
を、読み取ることがはるかに簡単です。)
最後のコメントは無視してください。(Bill、 'namespace po = boost :: program_options'ではなく' namespace po = boost :: program_options'です) –
これはの名前空間でありますC++標準ライブラリ。 AFAIKこれはあなたが「すぐに使える」唯一の名前空間です。あなたが自分で定義しなければならない他のものや、他のライブラリからそれらを得ることができます。
C++標準ライブラリのすべてのファイルは、std名前空間内のすべてのエンティティを宣言します。サードパーティのライブラリ(boostなど)を使用している場合や、独自の名前空間を定義している場合にのみ、他の名前空間に遭遇します。
std::rel_ops
名前空間に言及した人はいません。それはoperator!=
,operator>
,operator<=
およびoperator>=
を定義します。
あなたは、使用するディレクティブまたは宣言でスコープ内にそれらを持ってきて、あなたのタイプにoperator<
とoperator==
を定義することができます。 std::rel_ops
によって提供される演算子は、これら2つの点で動作します。
これらの書籍を焼く。 –