C++ Primer 笔记16

1、 命名空间(namespace) 为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,这样使用独立开发的库就更加容易,一个命名空间时一个作用域,通过在命名空间内部定义库中的名字,库的作者(以及用户)可以避免全局名字固有的限制。 命名空间作用域不能以分号结束。
2、在命名空间中定义的名字可以被命名空间中的其他成员直接访问,命名空间外部的代码必须指出名字在哪个命名空间中。 可以编写using声明来获得对我们知道将经常使用的名字的直接访问: using std::vector;
3、命名空间可以是不连续的,编写命名空间定义:
namespace namespace_name{
//declarations
}
既可以定义新的命名空间,也可以添加到现存命名空间中。 如果名字namespace_name不是引用前面定义的命名空间,则用该名字创建新的命名空间,否则,这个定义打开一个已存在的命名空间,并将这些新声明加到那个命名空间。
4、定义在全局作用域的名字(在任意类,函数或命名空间外部声明的名字)是定义在全局命名空间(global namespace)中的。 因为全局命名空间是隐含的,它没有名字,所以记号::member_name引用全局命名空间的成员。如::Sleep();
5、一个嵌套命名空间即是一个嵌套作用域——其作用域嵌套在包含它的命名空间内部。嵌套命名空间中的名字遵循常规规则:外围命名空间中声明的名字被嵌套命名空间中同一名字的声明所屏蔽。
6、命名空间可以是未命名的,未命名的命名空间(unnamed namespace)在定义时没有给定名字。未命名的命名空间以关键字namespace开头,接在关键字namespace后面的是由花括号定界的声明块。 未命名的命名空间与命名空间不同,未命名的命名空间的定义局部于特定文件,从不跨越多个文本文件。 未命名的命名空间中定义的名字只在包含该命名空间的文件中可见。 如果未命名的命名空间是嵌套的,其中的名字按常规方法使用外围命名空间名字访问。
7、除了在函数或其他作用域内部,头文件不应该包含using指示或using声明。在其顶级作用域包含using指示或using声明的头文件中,具有将该名字注入包含该头文件的文件中的效果。头文件应该只定义作为其接口的一部分的名字,不要定义在其实现中使用的名字。
8、命名空间别名(namespace alias) 可用命名空间别名将较短的同义词与命名空间名字相关联。例如
namespace cplusplus_primer{...}
这样长得命名空间名字,可以像下面这样与较短的同义词相关联:
namespace primer = cplusplus_priner;
9、using指示的形式 :using指示以关键字using开头,后接关键字namespace,再接命名空间名字。例:
using namespace std;
可以尝试用using指示编写程序,但在使用多个库的时候,这样做会重新引入名字冲突的所有问题。 using指示有用的一种情况是,用在命名空间本身的实现文件中。using指示注入来自一个命名空间的所有名字,它的使用是靠不住的。
10、接受类类型形参(或类类型指针及引用形参)的函数(包括重载操作符),以及与类本身定义在同一命名空间中的函数(包括重载操作符),在用类类型对象(或类类型的引用及指针)作为实参的时候是可见的。
11、在命名空间内部声明模板影响着怎样声明模板特化:模板的显式特化必须在定义通用模板的命名空间中声明,否则,该特化将与它所特化的模板不同名。
    有两种定义特化的方式:一种是重新打开命名空间并加入特化的定义,可以这样做是因为命名空间定义是不连续的; 或者用与在命名空间定义外部定义命名空间成员相同的方式来定义特化:使用由命名空间名字限定的模板名定义特化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值