なぜ "using namespace std;"がバッドプラクティスと言われるのですか?
他の人から、コードの中で「using namespace std;`」と書くのは間違いで、代わりに「std::cout」や「std::cin」を直接使うべきだと言われたことがあります。
なぜ「名前空間std;を使う」ことが悪い習慣とされているのでしょうか?効率が悪いとか、曖昧な変数(
std`名前空間の関数と同じ名前の変数)を宣言してしまう危険性があるということでしょうか?また、パフォーマンスに影響はありますか?
2466
3
これはパフォーマンスとは全く関係ありません。しかし、考えてみてください。あなたはFooとBarという2つのライブラリを使っています。
すべて順調で、Fooからは
Blah()
を、BarからはQuux()
を問題なく呼び出すことができます。しかし、ある日、あなたはFooの新しいバージョン2.0にアップグレードし、そこにはQuux()
という関数が追加されました。ここでコンフリクトが発生します。Foo 2.0 と Bar の両方がQuux()
をあなたのグローバルな名前空間にインポートしているのです。これを修正するには、特に関数のパラメータがたまたま一致した場合には、多少の努力が必要になります。もしあなたが
foo::Blah()
とbar::Quux()
を使っていたら、foo::Quux()
の導入は何の問題もなかったでしょう。もうひとつの理由は、驚きです。
もし、`std::cout
それは、複雑さを管理するためです。名前空間を使うと、望まないものが入ってきてしまい、デバッグが難しくなる可能性があります(可能性と言っています)。std::をあちこちに使うと読みにくくなります(文字数が増えたりして)。
当然のことですが、自分のできる範囲で、自分の気持ちで、複雑さを管理しましょう。