除了其他答案,我还会再举一些例子。
许多 C++ 编程书籍经常通过在源文件开头的某处添加以下行来公开整个 STD 命名空间:
using namespace std;
在现实生活中公开完整的命名空间实际上碰巧是一种不好的做法,因为在某些时候可能会发生各种冲突,尤其是当许多开发人员从事同一任务时提供代码时。这种编程风格也违反了面向对象编程的基本规则之一——通过封装数据来避免暴露超出实际需要的内容。这就是为什么类有公共和私有成员、getter 和 setter 等的原因。命名空间只是对信息进行分组的另一种方式。暴露整个 std 命名空间是违反这条规则的,特别是如果你只想使用 std::cout、std::cin 和std::endl。您可以轻松地将 using 应用到特定函数,这使您可以更精确地控制,并更有可能避免您可能在某些时候使用的多个命名空间中的命名冲突:
using std::cout;
using std::cin;
using std::endl;
这允许您在代码中调用 cout、cin 和 endl,而无需命名空间前缀。如果您在某个时候遇到命名冲突,那么查看一组 using 指令会容易得多,而不是想知道您暴露的错误来自整个命名空间的哪个位置。
如果存在命名空间链或命名空间的名称太长,人们也会对单个函数/变量使用 using 指令。如果你有类似的东西
namespace my_really_long_and_pointless_namespace_that_does_nothing_at_all {
void foo() { ... }
}
或
namespace1 {
namespace2 {
...
namepaceN {
void foo() { ... }
}
}
}
每次你想调用 foo() 方法时都必须写完整的东西是一件很痛苦的事。通过写作
using my_really_long_and_pointless_namespace_that_does_nothing_at_all::foo;
分别
using namespace1::namespace2:: ... ::namespaceN::foo;
让你的手指省点工夫。