14

どこに置くか迷いusing namespace std;ます。の中に があるコードを見ましたusing namespace std;が、 のint main(){} 後に入れていました#include <iostream>。どこに置くべきか、どこに置くかで違いはありますか?

4

7 に答える 7

15

関数内に追加すると、using ステートメントの範囲がその関数のみに制限されます。usingヘッダー ファイルのユーザーとの競合を避けるために 、ステートメントをヘッダー内に配置しないでください。

競合が発生しないことがわかっている場合は、ファイル スコープの main の上に配置しても問題ありませんが、インポートされた他の型で問題が発生する可能性があるため、通常、中規模のプロジェクトでは避ける必要があります。グローバル名前空間の汚染をできる限り回避しようとしますが、1 回限りの小さな実装ファイルを作成する場合はusing namespace std;、便宜上先頭に を追加します。

std::coutあなたの場合、 and (ほんの一例)だけを使いたいと仮定するとstd::cin、これを行うことができます:

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

これで、タイプ/オブジェクトを毎回完全に修飾せずに書き込むことができ、グローバル名前空間の汚染も回避できcin >> whateverます。cout << whatever

于 2011-06-24T23:36:45.367 に答える
13

どこに置くかで印象が大きく変わります

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

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

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

一般に、ヘッダーのグローバル スコープで使用することは非常に悪い習慣であり、Unity ビルドではヘッダーとソース ファイルの区別が曖昧であるため、グローバル スコープで使用することはやや悪い習慣です。

必要な関数で使用するか、まったく使用せずに、標準ライブラリ関数/クラスの前にstd::.

于 2011-06-24T23:37:38.467 に答える
7

一般に (そして確かに大規模なプロジェクトでは)、まったく使用しないことをお勧めします。

于 2011-06-24T23:36:27.467 に答える
6

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

于 2011-06-24T23:36:55.853 に答える
2

どこにでも std:: を入力するのが嫌いな場合 (私のコードでは十分なダブルコロンを取得できません!)、次のようにスコープに必要な名前を選択的にインポートすることをお勧めします。

void some_function()
{
  using std::vector;

  vector<int> x;
  ...
}

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

このようにして、標準ライブラリ内のすべての名前をグローバル名前空間にプルすることはありません。

于 2011-06-24T23:39:39.397 に答える
0

stdどこに置いても、すべてがスコープに含まれます。ファイルスコープにある場合はファイル内のどこでもカウントされ、関数内にある場合は関数内にのみ適用されるため、必要に応じて異なります。個人的には、宣言するのは好きではありませんusing namespace std

于 2011-06-24T23:38:07.477 に答える
0

ここにいる多くの人は、まったく使用すべきではないと言うでしょう。これは、すでに 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..
于 2011-06-24T23:44:04.653 に答える