なぜ "using namespace std;"がバッドプラクティスと言われるのですか?

他の人から、コードの中で「using namespace std;`」と書くのは間違いで、代わりに「std::cout」や「std::cin」を直接使うべきだと言われたことがあります。

なぜ「名前空間std;を使う」ことが悪い習慣とされているのでしょうか?効率が悪いとか、曖昧な変数(std`名前空間の関数と同じ名前の変数)を宣言してしまう危険性があるということでしょうか?また、パフォーマンスに影響はありますか?

ソリューション

これはパフォーマンスとは全く関係ありません。しかし、考えてみてください。あなたはFooとBarという2つのライブラリを使っています。

using namespace foo;
using namespace bar;

すべて順調で、FooからはBlah()を、BarからはQuux()を問題なく呼び出すことができます。しかし、ある日、あなたはFooの新しいバージョン2.0にアップグレードし、そこにはQuux()という関数が追加されました。ここでコンフリクトが発生します。Foo 2.0 と Bar の両方が Quux() をあなたのグローバルな名前空間にインポートしているのです。これを修正するには、特に関数のパラメータがたまたま一致した場合には、多少の努力が必要になります。

もしあなたが foo::Blah()bar::Quux() を使っていたら、 foo::Quux() の導入は何の問題もなかったでしょう。

解説 (39)

もうひとつの理由は、驚きです。

もし、`std::cout

解説 (5)

それは、複雑さを管理するためです。名前空間を使うと、望まないものが入ってきてしまい、デバッグが難しくなる可能性があります(可能性と言っています)。std::をあちこちに使うと読みにくくなります(文字数が増えたりして)。

当然のことですが、自分のできる範囲で、自分の気持ちで、複雑さを管理しましょう。

解説 (0)