C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员
1. 3种方法
- using 声明
- 命名空间的别名( namespace alias)
- using 指示( using directive)
1.1 命名空间的别名
namespace cplusplus_primer { /* ... / ;}
namespace primer = cplusplus_primer;
命名空间的別名也可以指向一个嵌套的命名空间:
namespace Qlib = primer::QueryLib;
Qlib::Query q;
一个命名空间可以有好几个同义词或别名, 所有别名都与命名空间原来的名字等价
1.2 using 声明( using declaration)
一条 using 声明( using declaration) 语句一次只引入命名空间的一个成员
using 声明的名字的作用域与 using 声明语句本身的作用域一致
eg.
using nsl::Student;
//在用上面的using声明后,在其后程序中出现的Student就是隐含地指nsl::Student
1.2.1 作用域
有效范围从using声明的地方开始,一直到using声明所在的作用域结束为止
未加限定的名字只能在using声明所在的作用域以及内层作用域中使用
一条using声明可以出现在全局作用域、局部作用域、命名空间作用域以及类的作用域中;在类的作用域中,这样的声明语句只能指向基类成员(因为派生类只能为那些它可以访问的名字提供using声明)
当命名空间被注入到它的外层作用域之后,很有可能该命名空间中定义的名字会与其外层作用域中的成员冲突。这种冲突是允许存在的,但是要想使用冲突的名字,我们就必须明确指出名字的版本
namespace blip {int bi = 16, bj = 15, bk = 23;// other declarationsint bj = 0; // ok: bj inside blip is hidden inside a namespacevoid manip(){// using directive - names in blip "added" to global scopeusing namespace blip;// clash between ::bj and blip::bj// detected only if bj is used++bi; // sets blip::bi to 17++bj; // error: ambiguous// global bj or blip::bj?++::bj; // ok: sets global bj to 1++blip::bj; // ok: sets blip::bj to 16int bk = 97; // local bk hides blip::bk++bk; // sets local bk to 98}
}
1.2.2. 头文件与 using 声明或指示
头文件如果在其顶层作用域中含有 using 指示或 using 声明, 则会将名字注入到所有包含了该头文件的文件中。
通常情况下, 头文件应该只负责定义接口部分的名字, 而不定义实现部分的名字。 因此, 头文件最多只能在它的函数或命名空间内使用 using 指示或 using 声明
C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员相关推荐
- C++ Primer 5th笔记(chap 18 大型程序工具)命名空间
1. 问题:命名空间污染 namespace pollution 多个库将名字放置在全局命名空间 1.1 一般人的解决方法 起长名字 eg. class cplusplus_primer_Query ...
- C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性
1. 命名空间成员 定义在命名空间中的实体称为命名空间成员. 在命名空间中定义的名字能够被命名空间中的其它成员直接訪问,命名空间外部的代码必须指出名字定义在哪个命名空间中 命名空间中定义的成员可以直接 ...
- C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数
1. 继承的构造函数与多重继承 如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误 struct Basel {Basel () = default;Basel (const ...
- C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间
1. using 声明或 using 指示能将某些函数添加到候选函数集 2. 对于接受类类型实参的函数来说, 其名字查找将在实参类所属的命名空间中进行.在这些命名空间中所有与被调用函数同名的函数都将被 ...
- C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域
1. 命名空间内部名字的查找规则 由内向外依次查找每个外层作用域. 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止. 只有位于开放的块中且在使用点之前声明的名字才被 ...
- C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamed namespace
1. 定义 关键字 namespace 后紧跟花括号括起来的一系列声明语句 1.1 生命周期 未命名的命名空间中定义的变量拥有静态生命周期: 它们在第一次使用前创建, 并且直到程序结束才销毁 未命名的 ...
- C++ Primer 5th笔记(chap 18 大型程序工具)内联命名空间 (inline namespace)
1. inline必须出现在命名空间第一次出现的地方 inline namespace FifthEd {//... }//后续再打开命名空间的时候可以写inline也可以不写 namespace F ...
- C++ Primer 5th笔记(chap 18 大型程序工具)noexcept
1. 通过提供 noexcept 说明 ( noexcept specification ) 指定某个函数不会抛出异常. 其形式是关键字 noexcept 紧跟在函数的参数列表后面 {// 紧跟在函数 ...
- C++ Primer 5th笔记(chap 18 大型程序工具)异常处理
1. 异常处理 ( exception handling) 允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理. 异常使得我们能够将问题的检测与解决过程分离开来. 程序的一部分负 ...
最新文章
- 4.Verilog 基础语法
- 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
- 《并行计算的编程模型》一1.4 数据类型
- 已饱和!未来程序员没活路了...
- pthread_cancel
- windows-7:系统利用终端cmd命令关机
- Java数组简介:数组是什么?
- 算法优化笔记|蝙蝠算法的理解及实现
- python用于pmc排产可以吗_有没有免费的PMC生产排程软件啊?
- P2921 [USACO08DEC]在农场万圣节
- virtualbox打开嵌套虚拟化
- nodebb 搜索不到插件问题排查
- HDU2571 命运(DP)
- 【Linux】Linux input子系统之Input event codes
- Luminati提供了哪些工具来帮助自动化操作?
- Gan(生成式对抗网络)
- 向量逆时针旋转ang度
- office2010 word发布博客 博客园
- bzoj2448 挖油
- python绘制网格线在原图上面_图像上使用JES(python)的白色网格线
热门文章
- JPA_‘Basic‘ attribute type should not be a container怎么解决
- mysql压力测试并优化_MySQL压力测试索引优化效果演示全过程
- php禁止某个链接,php – 使用htaccess忽略链接的某些部分
- java汽车生产工厂模式_什么是工厂模式java
- JAVA项目实训struts2_Java Web项目搭建过程记录(struts2)
- DL之DCGAN:基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成
- BigData之Hive beeline:beeline的简介、使用方法之详细攻略
- 论文阅读笔记01-attention-is-all-you-need
- 20181204-1 每周例行报告
- python 面向对象编程 之 上下文管理协议