总有一个全局命名空间,你无法摆脱它,而且由于每个其他命名空间都嵌套在其中的某个位置,所以你无法真正避免它。
真正的问题是你在里面放了什么。我不认为初学者将他们的标识符直接放在全局命名空间中是一个坏主意。事实上,如果您正在编写 main 函数,那么我认为没有理由不使用您认为合适的所有全局命名空间。只有在编写一个库供其他人使用时,才必须尽量减少对全局命名空间的影响,通常是通过向其中注入非常少量(一个?)的命名空间。
是否using namespace std;
是一个好主意是一个单独但相关的主题。
我个人认为初学者绝对不应该这样做using namespace std;
。根据定义,他们是那种不知道std
命名空间可能包含的每个标识符的用户,并且部分由名称冲突引起的错误消息可能会非常混乱。
例如,正确(或错误!)包含以下“初学者样式”代码会产生关于count
模棱两可的错误。专家修复代码没有问题。初学者可能会被难住。
using namespace std;
int count = 3;
int main()
{
cout << count << endl;
return 0;
}
此外,使用using namespace std;
要求您引入名称空间这个词和名称空间的概念,或者将指令捏造为“必需的魔法”或类似的东西。没有它,你可以说<string>
头文件中 C++ 提供的标准字符串类型的名称是std::string
. 只有在将事物放入单独的命名空间或将事物从一个命名空间注入另一个命名空间时,才需要理解命名空间概念本身。这些都是更高级的主题,可以保存到以后。