2011-06-24 6 views
13

私はusing namespace std;をどこに置くのだろうかと思います。 int main(){}using namespace std;のコードを見ましたが、#include <iostream>の後に置いていました。どこに置いたらいいですか?どこに置いても違いはありますか?名前空間stdを使用する場所。

+8

はどこにでもそれを入れないでください! –

+3

@Martin:Meh、それは過度に制限的です。 'namespace std;を使うと問題を起こさない小さなプロジェクトやファイルがたくさんあります。 –

+2

絶対に決してそれをヘッダーファイルに入れないでください。最善の方法は、 'namespace std'をどこでも使用することです。私はマーティンと同意する。 –

答えて

11

巨大なを置く場所になります。

関数内に配置すると、その関数にのみ適用されます。

グローバルスコープ内の関数の外に置くと、そのポイント以降のすべてに適用されます。

ヘッダーファイルのグローバルスコープ内の関数の外に置くと、そのヘッダーを含むファイルにも適用されます。

Unity buildsでは、ヘッダーとソースファイルの区別がぼやけているため、一般的にはヘッダーのグローバルスコープで使用するのは非常に悪いことです。

あなたが必要とする機能でそれを使用するか、まったく使用せず、標準ライブラリ関数/クラスの先頭にstd::という接頭辞を付けるのがよいでしょう。

13

関数内に追加すると、usingステートメントのスコープがその関数だけに制限されます。 usingステートメントをヘッダーファイルのユーザーの競合を避けるためにヘッダーの内部に置くべきではありません。

競合が発生しないことがわかっていても、他のインポートされたタイプに問題が発生する可能性があり、通常は中程度のサイズのプロジェクトでは避けるべきであれば、私は可能な限りグローバルな名前空間の汚染を避けようとしていますが、私が一度限りの小さな実装ファイルを書いている場合は、便宜上、先頭にusing namespace std;を追加します。あなただけstd::coutstd::cin(単なる例)を使用したい、あなたがこれを行うことができますと仮定し、あなたの場合は

、:

using std::cout; 
using std::cin; 

今、あなたは完全に/各オブジェクトタイプを修飾せずにcin >> whatevercout << whateverを書くことができますグローバルな名前空間の汚染を避けることもできます。

6

usingディレクティブはスコープが設定されているため、そのスコープ内でのみ有効です。あなたの状況に最も適している場所であれば、それを使用してください。

0

stdのすべてを、どこに置いてもどこにでも持ち込むことができます。ファイルスコープであれば、ファイル内のどこにあっても、関数内であれば、関数内でのみ適用されます。したがって、必要なものによって異なります。個人的には、私はusing namespace stdと宣言したくありません。

2

std :: everywhere(私はコード内で十分なダブルコロンを得ることができません!)と入力したくない場合は、スコープに入れたい名前を選択的にインポートするのがベストプラクティスです。

void some_function() 
{ 
    using std::vector; 

    vector<int> x; 
    ... 
} 

グローバルスコープでuseの名前を選択しても問題ありません。

このようにして、標準ライブラリのすべての名前をグローバル名前空間に取り込むことはできません。

0

ここにいる多くの人は、まったく使ってはいけないと言います。この理由は、std名前空間にすでにある関数を間違って定義した場合、非常に大きなプロジェクトでは追跡が難しい可能性があるため、矛盾が生じることがあります。簡単なプログラムでは正直言ってそれほど大きな問題ではありませんが、どこに置いても違いはありません。

グローバルスコープでは、どこにでも適用されます。ローカルスコープ(main()内のみ)では、メインスコープにのみ適用されます。ここで

は、いくつかの選択肢の良い選択肢

  • プットのstd ::あるすなわち、すべての前に、std::cout << "Hello, World!" << std::endl;
  • のみ関数内であなたが望む特定のものを使用します。

ローカル関数にしたいだけのものを使用する例:

int main() 
{ 
    using std::cout; 
    using std::endl; 
    cout << "Hello, World!" << endl; 
    return 0; 
} // Obviously you need #include <iostream> at the top.. 
関連する問題