《C++编程思想》 第九章 命 名 控 制 (原书代码+知识点+习题+解答)

一.相关知识点

        那些通常放在头文件里的名字,像常量、内联函数(inline function),在缺省情况下都是内部连接的(当然常量只有在C + +中缺省情况下是内部连接的,在 C中它缺省为外部连接)。注意连接只引用那些在连接/装载期间有地址的成员,因此类声明和局部变量并没有连接。


名字空间的产生与一个类的产生非常相似:
namespace MyLib{
//Declarations
}
这就产生了一个新的名字空间,其中包含了各种声明.namespace与class、struct、union和enum有着明显的区别:
1) namespace只能在全局范畴定义,但它们之间可以互相嵌套。
2) 在namespace定义的结尾,右大括号的后面不必要跟一个分号。
3) 一个namespace可以在多个头文件中用一个标识符来定义,就好象重复定义一个类一样。


4) 一个namespace的名字可以用另一个名字来作它的别名,这样我们就不必敲打那些开发商提供的冗长的名字了。


5) 我们不能像类那样去创建一个名字空间的实例。
1. 未命名的名字空间

每个编译单元都可包含一个未命名的名字空间—在namespace关键字后面没有标识符。



在编译单元内,这个空间中的名字自动而无限制地有效。每个编译单元要确保只有一个未命名的名字空间。如果把一个局部名字放在一个未命名的名字空间中,无需加上 static说明就可以让它们作内部连接。
2. 友元
可以在一个名字空间的类定义之内插入一个 friend 声明:
namespace me{
  class us{
     //...
     friend you();
  };
}

使用名字空间
可以用两种方法在一个名字空间引用同一个名字:一种是用范围分解运算符,还有一种是用using关键字。
1. 范围分解
名字空间中的任何命名都可以用范围分解运算符明确指定,就像引用一个类中的名字一样.



2. using指令
用using 关键字可以让我们立即输入整个名字空间,摆脱输入一个名字空间中标识符的烦恼。这种using和namespace关键字的搭配使用叫作 using 指令。 using 关键字在当前范围内直接声明了名字空间中的所有的名字,所以可以很方便地使用这些无限制的名字.

现在可以在函数内部声明m a t h中的所有名字,但允许这些名字嵌套在函数中。


using 指令有一个缺点,那就是看起来不那么直观,using指令引入名字可见性的范围是在创建using的地方。但我们可以使来自 using 指令的名字暂时无效,就像它们已经被声明为这个范围的全局名一样。

如果有第二个名字空间

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值