どこに置くか迷いusing namespace std;
ます。の中に があるコードを見ましたusing namespace std;
が、 のint main(){}
後に入れていました#include <iostream>
。どこに置くべきか、どこに置くかで違いはありますか?
7 に答える
関数内に追加すると、using ステートメントの範囲がその関数のみに制限されます。using
ヘッダー ファイルのユーザーとの競合を避けるために 、ステートメントをヘッダー内に配置しないでください。
競合が発生しないことがわかっている場合は、ファイル スコープの main の上に配置しても問題ありませんが、インポートされた他の型で問題が発生する可能性があるため、通常、中規模のプロジェクトでは避ける必要があります。グローバル名前空間の汚染をできる限り回避しようとしますが、1 回限りの小さな実装ファイルを作成する場合はusing namespace std;
、便宜上先頭に を追加します。
std::cout
あなたの場合、 and (ほんの一例)だけを使いたいと仮定するとstd::cin
、これを行うことができます:
using std::cout;
using std::cin;
これで、タイプ/オブジェクトを毎回完全に修飾せずに書き込むことができ、グローバル名前空間の汚染も回避できcin >> whatever
ます。cout << whatever
どこに置くかで印象が大きく変わります。
関数内に配置すると、その関数にのみ適用されます。
グローバルスコープの関数の外に置くと、それ以降のすべてに適用されます。
ヘッダー ファイルのグローバル スコープの関数の外に配置すると、そのヘッダーを含むすべてのファイルに適用されます。
一般に、ヘッダーのグローバル スコープで使用することは非常に悪い習慣であり、Unity ビルドではヘッダーとソース ファイルの区別が曖昧であるため、グローバル スコープで使用することはやや悪い習慣です。
必要な関数で使用するか、まったく使用せずに、標準ライブラリ関数/クラスの前にstd::
.
一般に (そして確かに大規模なプロジェクトでは)、まったく使用しないことをお勧めします。
ディレクティブはスコープが設定されているため、using
表示されるスコープ内でのみ有効になります。状況に最も適した場所で使用してください。
どこにでも std:: を入力するのが嫌いな場合 (私のコードでは十分なダブルコロンを取得できません!)、次のようにスコープに必要な名前を選択的にインポートすることをお勧めします。
void some_function()
{
using std::vector;
vector<int> x;
...
}
use
グローバル スコープで名前を選択しても問題ありません。
このようにして、標準ライブラリ内のすべての名前をグローバル名前空間にプルすることはありません。
std
どこに置いても、すべてがスコープに含まれます。ファイルスコープにある場合はファイル内のどこでもカウントされ、関数内にある場合は関数内にのみ適用されるため、必要に応じて異なります。個人的には、宣言するのは好きではありませんusing namespace std
。
ここにいる多くの人は、まったく使用すべきではないと言うでしょう。これは、すでに std 名前空間にある関数を誤って定義すると、競合が発生する可能性があるためです。非常に大きなプロジェクトでは、追跡が困難になる可能性があります。些細なプログラムの場合、正直言ってそれほど大きな問題ではありませんが、どこに置くかで違いが生じます。
グローバル スコープでは、すべての場所に適用されます。ローカル スコープ (つまり、main() のみ) では、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..