10

重複の可能性:
なぜ 'using namespace std;'なのですか? C ++で悪い習慣と見なされますか?

先日、私が質問をしたとき、誰かが質問をした場合、using namespace std;私が少し変だと思ったのではusing namespace std;なく、正しい方法を示してくださいと答えてくれました。私は「初心者」のコーダーであり、皆さんはよく知っています。

だから私の質問は次のとおりだと思います:なぜstd::代わりにusing namespace std;

ありがとう。

4

6 に答える 6

21

C ++ FAQから:

using namespace stdコードで使用する必要がありますか?

おそらくそうではありません。

人々は何度も入力するのが好きではなく、たとえ修飾されていなくても、コンパイラーが任意の名前を見ることができるstd::ことを発見し ます。その軟膏のフライは、あなたが考えていなかった名前であっても、コンパイラに任意の名前を表示させることです。言い換えれば、名前の競合やあいまいさを生み出す可能性があります。using namespace stdstd std

https://isocpp.org/wiki/faq/coding-standards#using-namespace-std

于 2011-03-29T07:15:21.110 に答える
4

簡単に言えば、間違ったタイプや関数を誤って使用したり、名前が競合したりする可能性は低くなります。独自の数学ライブラリとstdを使用しているとし、それらの両方を任意の順序で使用して宣言します。現在、これらは両方とも関数powを定義しています。powを呼び出すときに、どのpowを使用していますか?余分に入力する価値があると思います。

于 2011-03-29T07:17:48.627 に答える
2

より経験豊富なプログラマーが明示的な名前空間を使用することはないと思います。たとえば、明示的な名前空間を好むのか、それともC++で「使用する」のかを参照してください。

ただし、ヘッダーファイルに名前空間をインポートしないでください。また、場合によっては、明示的な名前空間がより明確になることに注意してくださいstd::min()std::max()

于 2011-03-29T07:18:14.337 に答える
1

なんか好みだと思います。一部の人々は、クラスを使用するときに明示的な名前空間を見たいと思っています。1つの例外は、ヘッダーファイルでusing名前空間stdを使用しないことです。これにより、このヘッダーファイルを使用しているクラスの動作が予期せず変更される可能性があるためです。

于 2011-03-29T07:18:25.233 に答える
0

名前空間は、変数の追加の修飾子です。'string'がで定義されているとしましょう。またstd、'string'をで定義するとしますmynamespace

ここでusing namespace std;、ファイルの先頭に書き込むと、それ以降、コンパイラーにとって文字列があいまいになります。

using namespace std;ただし、他の人があなたのクラスを使用したいと思うかもしれず、競合が発生する可能性があるため、header(.h)ファイルを厳密に含まないという中間的なアプローチを取ることができます。実装(.cxx)ファイルの場合、競合が発生しないことが確実な場合は、慎重に使用できます。

于 2011-03-29T07:17:39.537 に答える
0

経験豊富なプログラマーは、問題を解決するものは何でも使用し、新しい問題を引き起こすものは何でも回避します。

したがって、明らかな理由から、ヘッダー ファイル レベルの using ディレクティブを回避します。

また、ソース ファイル内で名前を完全に修飾することを避けようとします。重要でない点は、正当な理由なく少ないコードで十分な場合に、より多くのコードを記述するのはエレガントではないということです。メジャーポイントはADLをオフにすることです。

これらの正当な理由は何ですか? 明示的に ADL をオフにしたい場合があります。あいまいさを解消したいときがあります。

したがって、以下は問題ありません。1) 関数の実装内の関数レベルの using ディレクティブと using 宣言。2) ソース ファイル内のソース ファイル レベルの using 宣言。3) (場合によっては) ソースファイルレベルの using ディレクティブ。

于 2011-03-29T07:57:44.800 に答える