私はusing namespace std;
をどこに置くのだろうかと思います。 int main(){}
のusing namespace std;
のコードを見ましたが、#include <iostream>
の後に置いていました。どこに置いたらいいですか?どこに置いても違いはありますか?名前空間stdを使用する場所。
答えて
巨大なを置く場所になります。
関数内に配置すると、その関数にのみ適用されます。
グローバルスコープ内の関数の外に置くと、そのポイント以降のすべてに適用されます。
ヘッダーファイルのグローバルスコープ内の関数の外に置くと、そのヘッダーを含むファイルにも適用されます。
Unity buildsでは、ヘッダーとソースファイルの区別がぼやけているため、一般的にはヘッダーのグローバルスコープで使用するのは非常に悪いことです。
あなたが必要とする機能でそれを使用するか、まったく使用せず、標準ライブラリ関数/クラスの先頭にstd::
という接頭辞を付けるのがよいでしょう。
一般的に(大規模なプロジェクトでは必ず)、not to use it at allが最適です。
関数内に追加すると、usingステートメントのスコープがその関数だけに制限されます。 using
ステートメントをヘッダーファイルのユーザーの競合を避けるためにヘッダーの内部に置くべきではありません。
競合が発生しないことがわかっていても、他のインポートされたタイプに問題が発生する可能性があり、通常は中程度のサイズのプロジェクトでは避けるべきであれば、私は可能な限りグローバルな名前空間の汚染を避けようとしていますが、私が一度限りの小さな実装ファイルを書いている場合は、便宜上、先頭にusing namespace std;
を追加します。あなただけstd::cout
とstd::cin
(単なる例)を使用したい、あなたがこれを行うことができますと仮定し、あなたの場合は
、:
using std::cout;
using std::cin;
今、あなたは完全に/各オブジェクトタイプを修飾せずにcin >> whatever
とcout << whatever
を書くことができますグローバルな名前空間の汚染を避けることもできます。
using
ディレクティブはスコープが設定されているため、そのスコープ内でのみ有効です。あなたの状況に最も適している場所であれば、それを使用してください。
std
のすべてを、どこに置いてもどこにでも持ち込むことができます。ファイルスコープであれば、ファイル内のどこにあっても、関数内であれば、関数内でのみ適用されます。したがって、必要なものによって異なります。個人的には、私はusing namespace std
と宣言したくありません。
std :: everywhere(私はコード内で十分なダブルコロンを得ることができません!)と入力したくない場合は、スコープに入れたい名前を選択的にインポートするのがベストプラクティスです。
void some_function()
{
using std::vector;
vector<int> x;
...
}
グローバルスコープでuse
の名前を選択しても問題ありません。
このようにして、標準ライブラリのすべての名前をグローバル名前空間に取り込むことはできません。
ここにいる多くの人は、まったく使ってはいけないと言います。この理由は、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..
- 1. PHP 5.2で名前空間を使用する場合ステートメント
- 2. 名前、場所、組織、名前空間のエンティティの再配置のための場所を抽出
- 3. イニシャライザリストの名前空間を使用
- 4. イベントハンドラコードを名前空間オブジェクトまたはクロージャで保持する場所
- 5. 名前空間: "グローバルとして使用"
- 6. XML上の名前空間の使用
- 7. PHPの名前空間と "使用"
- 8. 名前空間名に変数tclを使用する
- 9. 名前空間
- 10. XPathを使用してデフォルトの名前空間(名前空間接頭辞なし)を取得する
- 11. 名前空間 'std'の 'vector'がタイプの名前ではありません
- 12. 対処する名前空間にglobal ::を使用する
- 13. 異なる名前空間から名前空間のリソースを作成する
- 14. リンクに名前空間を使用したlink_toを使用
- 15. html:FBML名前空間
- 16. 名前空間&__autoload
- 17. WPF:XAML名前空間
- 18. 名前空間dict?
- 19. 名前空間カスタムイベントトリガー
- 20. IPython.parallel名前空間
- 21. IInvokeProvider名前空間?
- 22. angularjs名前空間
- 23. std名前空間以外の標準機能の防止
- 24. 'std'以外のC++で役に立つ名前空間
- 25. 名前空間 "std"にメンバー "ソート"がありません
- 26. 名前空間なしのGroovy XMLSlurper名前空間エラー
- 27. 無名名前空間
- 28. Resharper:名前空間がファイルの場所に対応していません
- 29. abc名前空間のアプリケーションを使用している場合、名前空間を変更するにはどうすればよいですか?
- 30. 名前空間パターンは、私は、次の名前空間パターンを使用していますエラー
はどこにでもそれを入れないでください! –
@Martin:Meh、それは過度に制限的です。 'namespace std;を使うと問題を起こさない小さなプロジェクトやファイルがたくさんあります。 –
絶対に決してそれをヘッダーファイルに入れないでください。最善の方法は、 'namespace std'をどこでも使用することです。私はマーティンと同意する。 –