使用 using

using 指示,第 703 页,两种使用场景:

  • using declaration 声明 using std::cout;
  • using directive 指示 using namespace std;

using 指示(using directive)和 using 声明类似的地方是,我们可以使用命名空间名字的简写形式;和 using 声明不同的地方是,我们无法控制哪些名字是可见的,因为所有名字都是可见的。

后者不能用在类作用域中;前者虽然能用在类作用域中但只能指向基类成员。更多知识请进一步学习《C++ Primer》

75 页明确提到头文件中不应使用 using 声明:

位于头文件的代码一般来说不应该使用 using 声明。这是因为头文件的内容会拷贝到引用它的文件中去,如果头文件有某个 using 声明,那么每个使用了该头文件的文件就都会有这个声明。对应某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突

702 页提到使用 using 指示也可能造成名字冲突问题:

如果我们提供了一个对 std 等命名空间的 using 指示而未做任何特殊控制的话,将重新引入由于使用了多个库而造成的名字冲突问题。

在源文件中使用 using 指示是否能够接受呢?能够节省大量的重复代码,注意规避名字冲突即可——除非源文件引入了较多的三方库,名字冲突并不常见。