【c++ primer】【18.2.2】使用命名空间成员

using声明:扼要概述

  一条using声明(using declaration)语句一次只能引用命名空间的一个成员。它使得我们可以清楚地知道程序中到底使用哪个名字。

  using声明引入的名字遵守与过去一样的作用域规则:它的有效范围从using声明的地方开始,一直到using声明所在的作用域结束为止。在此过程中,外层作用域中的同名实体将被隐藏。未加限定的名字只能在using声明所在的作用域以及内存作用域中使用。在有效的作用域结束后,我们就必须使用完整的经过限定的名字了。

  一条using声明语句可以出现在全局作用域、局部作用域、命名空间作用域以及类作用域中。在类的作用域中,这样的声明语句只能指向基类成员。

using指示

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

  using指示以关键字using开始,后面是关键字namespace以及命名空间的名字。如果这里所用的名字不是一个已经定义好的命名空间的名字,则程序将发生错误。using声明可以出现在全局作用域、局部作用域和命名空间作用域中,但是不能出现在类作用域中。using指示使得特定的命名空间中的所有名字都可见,这样我们就无须再为它们添加任何前缀限定符了。简写的名字从using指示开始,一直到using指示所在的作用域结束都能使用。

using指示与作用域

  using指示引入的名字的作用域远比using声明引入的名字的作用域复杂。如我们所知,using声明的名字的作用域与using声明语句本身的作用域一致,从效果上看就好像using声明语句为命名空间的成员在当前作用域内创建了一个别名一样。

  using指示所作的绝非声明别名这么简单。相反,它具有将命名空间成员提升到包含命名空间本身和using指示的最近的作用域的能力。

  using声明和using指示在作用域上的区别直接决定了它们工作方式的不同。对于using声明来说,我们指示简单地令名字在局部作用域内有效。相反,using指示是令整个命名空间的所有内容变得有效。通常情况下,命名空间中会含有一些不能出现在

using指示示例

头文件与using声明或指示

猜你喜欢

转载自www.cnblogs.com/bootblack/p/11430388.html