これは、名前の競合をする可能性を高めます。
たとえば、次のコード:
:cat main.cc
/// @file main.cc
#include <cstdio>
#include <algorithm>
using namespace std;
int max = 0;
int main()
{
printf("%d\n", max);
return 0;
}
コンパイルエラーが報告されます。
:g++ -O main.cc -o main
main.cc:9:17: error: reference to 'max' is ambiguous
printf("%d\n", max);
^
main.cc:6:5: note: candidate found by name lookup is 'max'
int max = 0;
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:2529:1: note: candidate found by name lookup is
'std::__1::max'
max(const _Tp& __a, const _Tp& __b)
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:2521:1: note: candidate found by name lookup is
'std::__1::max'
max(const _Tp& __a, const _Tp& __b, _Compare __comp)
^
1 error generated.
一般的には、それだけで、指定した名前を導入しているため、より安全な使用するよりも、コンパイラのコマンドを使用してコマンドを使用します。名前はローカル名と競合する場合、コンパイラは、命令を発行します。コンパイラのコマンドを使用して名を含むすべての名前は、必要とされないこともインポートします。ローカル名と競合する場合は、名前が名前空間のローカルバージョンが上書きされ、コンパイラは警告を発行しません。また、オープン名前空間名は、名前空間はそれが難しい名前が追加された内容を正確に把握すること、複数の場所に散在することができる意味しています。
スティーブ・ドノバン "の例によるC ++」:
しかし、一部の人々は、名前空間のstdの例の名前空間の汚染を使用すると、すべてが名前空間を防止するために設計されたものですグローバル名前空間の中に投棄されているため、と強く感じています。あなたは、std名前空間を使用しての意味を理解する必要があり、あなたはそれが常に悪い考えであるケースがあることを認識する必要があります。