4

using namespace std;を使用できるようにするために入力する必要があるのはなぜですか?また、これらは何と呼ばれていますか。関数ですか ?coutendlcout

coutCにありますか?多くの点で優れているため、C++で実装されていると聞きました。

4

5 に答える 5

13

coutstdは名前空間で定義されたグローバルオブジェクトであり、名前空間でendlも定義された(ストリームマニピュレータ)関数stdです。

それらの名前をグローバル名前空間にインポートするアクションを実行しない場合、修飾されていない識別子coutとでそれらを参照することはできませんendl。完全修飾名を使用する必要があります。

std::cout << "Hello, World!" << std::endl;

基本的に、名前空間にusing namespace std存在するエンティティのすべての名前をstdグローバル名前空間に挿入します。

using namespace std;
cout << "Hello, Wordl!" << endl;

ただし、usingグローバル名前空間にそのようなディレクティブを含めることは悪いプログラミング手法であり、ほぼ確実に悪意のある名前の衝突につながることに注意してください。

本当にそれを使用する必要がある場合(たとえば、自分の関数がstd名前空間で定義された多くの関数を使用していて、記述std::によってコードが読みにくくなる場合)、そのスコープを個々の関数のローカルスコープに制限する必要があります。

void my_function_using_a_lot_of_stuff_from_std()
{
    using namespace std;
    cout << "Hello, Wordl!" << endl;

    // Other instructions using entities from the std namespace...
}

これが実用的である限り、はるかに優れているのは、次の、より侵襲性の低い宣言を使用することです。これにより、指定した名前のみが選択的にインポートされます。

using std::cout;
using std::endl;

cout << "Hello, Wordl!" << endl;
于 2013-03-11T19:33:05.583 に答える
4

いいえ!は必要ありませusing namespace stdん。使用しないでください。完全修飾名std::coutを使用しstd::endl、または、小さな範囲では、

using std::cout;
using std::endl;

その他の質問std::coutは、機能ではありません。これは、標準出力にバインドされた一種のグローバル出力ストリームオブジェクトです。そしてstd::cout、Cにはありません。

于 2013-03-11T19:29:57.897 に答える
2
using namespace std;

名前のコレクション(名前空間と呼ばれる)内の名前を現在のスコープに移動します。ほとんどの教科書は次のように使用を奨励しているようです。

#include <iostream>
using namespace std;

int main()
{
     //Code which uses cout, cin, cerr, endl etc.
}

名前空間スコープが重複している場合に名前と予期しない衝突が発生する可能性があり、std :: endlのような完全修飾名を直接使用することを推奨するため、この方法での使用を推奨しない人もいます。

次のような他のオプションがあります

a)スコープルールを利用して名前空間を一時的に取り込む

int main()
{
     {
        using namespace std;
        //Code which uses things from std
     }
     //Code which might collide with the std namespace
}

b)または必要なものだけを持ち込む

using std::endl;
using std::cin;

最後の質問への回答として、cinはストリームオブジェクト(ストリームの抽出および挿入演算子>>および<<をサポートする関数とデータのコレクション)です。

于 2013-03-11T19:49:30.960 に答える
0

coutとendlは、C++の標準ライブラリのメンバーです。usingステートメントなしでそれらを使用する場合は、名前空間の前に追加するだけです。

std::cout
std::endl

これはあなたに役立つかもしれません:

http://msdn.microsoft.com/en-us/library/bzbx67e8(VS.80).aspx

coutCには存在しません。

于 2013-03-11T19:33:26.850 に答える
0

通常、「名前空間stdの使用」は、実際のプログラムではなく、小規模な学習プロジェクトでのみ宣言されます。その理由は、まず、コンパイラがそれを行うのに時間がかかるため、その名前空間からすべてをコードに含める必要がないためです。Stroustrup自身は、これは悪い味だと書いています。また、Cのprintfよりも優れています。これは、タイプセーフであり、ライブラリクラスを変更することなく、独自のタイプに対して簡単にオーバーロードできるためです。

于 2013-03-11T19:42:45.907 に答える