using namespace stdをmainの外に書くな

C++のプロフェッショナルならば、一番外でusing namespaceをすることが、名前空間の汚染にしかならないということは分かっているはずです。

ここはC++言語らしく、使うものは宣言してしまったらどうでしょう?

そこで、using宣言子の出番になります。私が思うに、using namespaceを使うのは手を抜くときだけで十分です。


使い方は簡単、usingの後にインポートしたいクラス、関数を宣言するだけ。

#include <iostream>

int main() {

    using std::cout;

    cout << "Hello World.n";

    return 0;

}

vector等も同様に利用できます。局所的に利用するのがお勧めですが、例えusingをmainの外に宣言してもusing namespace stdよりは汚染を最小限に留めます。

名前空間もヘッダと同様、計画性をもって利用しましょう。using namespace stdをmainの外におまじないとして書く、と説明するような入門書を捨てましょう。

脱初心者はそれからです。

Leave a Reply

2 Comments on "using namespace stdをmainの外に書くな"

Notify of
avatar
Sort by:   newest | oldest | most voted
すずめの子
Guest

>> C++のプロフェッショナルならば、一番外で using namespaceをすることが、名前 空間 の汚染にしかならないということは分かって いるはずです。
C++ コンソールアプリ、ANSI 標準ライブラリのみ使う、17000行ぐらい、7個のクラス、ほとんどの*.cpp ファイルに
using namespace std;
を書いた。 Header File には書かなかった。
using namespace std;
の汚染、混乱にまったく出会っていない。
どうしてなんだろう?
関数名については、日月が経過しても内容を思い浮かべることができるように、少し長めの省略文的な名前を付ける習慣にしているからだろうか?
using namespace std; 汚染の注意をしばしば目にするが、そうだろうかな? といつも思う。
私は全然これで困ったことがないです。

konuma
Guest

きっと貴方の周りには注意深い人が多いだけと思います。以下のコードをコンパイルしてみてください。
using namespace std;
int main()
{
int ends = 3;
cout << "test" << ends;
}
次に以下のコードをコンパイルしてください。
int main()
{
using std::cout;
using std::ends;
int ends = 3;
cout << "test" << ends;
}
ここまであからさまなミスはないとおもいますが、endsっていう大域宣言を知らない人もいるのです。
std空間の全ての変数を把握したり、拡張を予期する?
私はやりたくないです・・・・。

wpDiscuz