を使用cout
するには、両方を指定する必要があります。
#include<iostream>
と
using namespace std;
どこでcout
定義されていますか?でiostream
、正しいですか?それで、それiostream
自体が名前空間にあるということstd
ですか?
の使用に関する両方のステートメントの意味は何cout
ですか?
なぜ両方を含める必要があるのか 混乱しています。
を使用cout
するには、両方を指定する必要があります。
#include<iostream>
と
using namespace std;
どこでcout
定義されていますか?でiostream
、正しいですか?それで、それiostream
自体が名前空間にあるということstd
ですか?
の使用に関する両方のステートメントの意味は何cout
ですか?
なぜ両方を含める必要があるのか 混乱しています。
iostream
cout が定義されているファイルの名前です。一方、std
は名前空間であり、(ある意味で) Java のパッケージと同等です。
cout は、iostream
std 名前空間内のファイルで定義されたインスタンスです。
cout
別の名前空間に別のインスタンスが存在する可能性があります。そのため、名前空間cout
からインスタンスを使用することを示すには、次のように記述する必要がありますstd
std::cout
、範囲を示します。
std::cout<<"Hello world"<<std::endl;
std::
どこでも回避するには、using
句を使用できます。
cout<<"Hello world"<<endl;
それらは2つの異なるものです。1 つはスコープを示し、もう 1 つは の実際の包含を示しcout
ます。
iostream で、名前が付けられた 2 つのインスタンスcout
が異なる名前空間に存在するとします。
namespace std{
ostream cout;
}
namespace other{
float cout;//instance of another type.
}
を含めた後も<iostream>
、名前空間を指定する必要があります。この#include
ステートメントは、「ねえ、std ::でcoutを使用してください」とは言いません。using
それが、スコープを指定するためのものです
C++ 実装で C スタイルのヘッダー ファイルを使用している場合 (多くの場合)、次のようなファイルが含まれています。
#include ... // bunches of other things included
namespace std {
... // various things
extern istream cin;
extern ostream cout;
extern ostream cerr;
... // various other things
}
std は、C++ 標準が、標準のもののほとんどが存在する必要があると述べている名前空間です。これは、グローバル名前空間が過密になるのを防ぐためです。 t は、標準的なものの名前として既に使用されています。
と言う事で
using namespace std;
名前を検索するときに、グローバル名前空間に加えて名前空間 std で検索することをコンパイラに伝えています。コンパイラがソース行を認識した場合:
return foo();
using namespace std;
行の後のどこかで、foo
その行の要件を満たす foo が見つかるまで、さまざまな名前空間 (スコープに似ています) を探します。特定の順序で名前空間を検索します。最初にローカル スコープ (実際には名前のない名前空間) を調べ、次に最もローカルなスコープを関数の外側まで何度も繰り返し、次に外側のオブジェクトの名前付きのもの (この場合はメソッド) を調べ、次にグローバル名 (この場合は関数、私が無視しているばかげてオーバーロードされていない限り () )、次にusing namespace std;
行を使用した場合は std 名前空間で。最後の 2 つの順序が間違っている可能性があります (グローバルの前に std が検索される可能性があります) が、それに依存するコードを作成することは避けてください。
cout
iostream 内で論理的に定義されます。論理的には、実際にはファイル iostream にある場合もあれば、iostream から含まれるファイルにある場合もあります。いずれにせよ、iostream をインクルードするのが の定義を取得する正しい方法ですcout
。
iostream のすべてのシンボルは名前空間にありますstd
。シンボルを使用するにはcout
、コンパイラにそれを見つける方法 (名前空間など) を伝える必要があります。いくつかの選択肢があります。
// explicit
std::cout << std::endl;
// import one symbol into your namespace (other symbols must still be explicit)
using std::cout;
cout << std::endl;
// import the entire namespace
using namespace std;
cout << endl;
// shorten the namespace (not that interesting for standard, but can be useful
// for long namespace names)
namespace s = std;
s::cout << s::endl;
は#include <iostream>
、cout を定義するヘッダー ファイルを参照します。cout を使用する場合は、常にインクルードが必要です。
する必要はありませんusing namespace std;
。これは、名前空間が明示されている場所ではなく、省略形cout
などを使用できるようにするだけです。個人的には、より冗長であることは確かですが、意味を明確にする必要があるため、使用しないことを好みます。endl
std::cout
std::endl
using namespace ...