1. 问题:命名空间污染 namespace pollution

多个库将名字放置在全局命名空间

1.1 一般人的解决方法

起长名字

eg.

class cplusplus_primer_Query {...}
string cplusplus_primer_make_plural (size_t, strings&);

2. 命名空间namespace

分割了全局命名空间, 其中每个命名空间是一个作用域。 通过在某个命名空间中定义库的名字, 库
的作者( 以及用户) 可以避免全局名字固有的限制

2.1 定义

关键字namespace + 命名空间的名字{
// 类
// 变量( 及其初始化操作)
// 函数( 及其定义)
// 模板和其他命名空间
}

eg.

//Sale_item.h
namespace cplusplus_primer{class Sale_item{};Sale_item operator+(const Sale_item&,const Sale_item&);class Query { /* ... */ };class Query_base { /* ... */ };
}

2.2 每个命名空间都是一个作用域

命名空间中的每个名字都必须表示该空间内的唯一实体。

因为不同命名空间的作用域不同, 所以在不同命名空间内可以有相同名字的成员定义在某个命名空间中的名字可以被该命名空间内的其他成员直接访问, 也可以被这些成员内嵌作用域中的任何单位访问。

cplusplus_primer::Query q = cplusplus_primer::Query ("hello" );AddisonWesley:: Query q = AddisonWesley::Query ("hello" );

2.3 命名空间可以是不连续的

命名空间可以定义在几个不同的部分,可以将几个独立的接口和实现文件组成一个命名空间

命名空间的组织方式类似于管理自定义类及函数的方式:

  • 命名空间的一部分成员的作用是定义类, 以及声明作为类接口的函数及对象, 则这
    些成员应该置于头文件中, 这些头文件将被包含在使用了这些成员的文件中。

  • 命名空间成员的定义部分则置于另外的源文件中

eg.
#include 应该出现在打开命名空间的操作之前, 否则程序将出错,因为会意味着我们将命名空间std嵌套在命名空间cplusplus_primer中

//--Sales__data.h
//#include 应该出现在打开命名空间的操作之前
#include <string>
namespace cplusplus_primer {class Sales_data { }; Sales_data operator+(const Sales_data&, const Sales_data &);//Sales_data 的其他接口函数的声明
}// ---- Query.h ----
namespace cplusplus_primer {class Query {public:Query(const std::string&);std::ostream &display(std::ostream&) const;//...};class Query_base { /* ... */};
} // ---- Sales_item.cc ----
#include "Sales_item.h"namespace cplusplus_primer {// definitions for Sales_item members and overloaded operators
}// ---- Query.cc ----
#include "Query.h"namespace cplusplus_primer {// definitions for Query members and related functions
} //--user.cc---
//Sales_data.h 头文件的名字位于命名空间 cplusplus_primer中#include "Sales_data.h"int main ( ){ using cplusplus_primer::Sales_data;Sales_data transl, trans2;// ...return 0;
}

C++ Primer 5th笔记(chap 18 大型程序工具)命名空间相关推荐

  1. C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

    1. 3种方法 using 声明 命名空间的别名( namespace alias) using 指示( using directive) 1.1 命名空间的别名 namespace cplusplu ...

  2. C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数

    1. 继承的构造函数与多重继承 如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误 struct Basel {Basel () = default;Basel (const ...

  3. C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

    1. using 声明或 using 指示能将某些函数添加到候选函数集 2. 对于接受类类型实参的函数来说, 其名字查找将在实参类所属的命名空间中进行.在这些命名空间中所有与被调用函数同名的函数都将被 ...

  4. C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域

    1. 命名空间内部名字的查找规则 由内向外依次查找每个外层作用域. 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止. 只有位于开放的块中且在使用点之前声明的名字才被 ...

  5. C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamed namespace

    1. 定义 关键字 namespace 后紧跟花括号括起来的一系列声明语句 1.1 生命周期 未命名的命名空间中定义的变量拥有静态生命周期: 它们在第一次使用前创建, 并且直到程序结束才销毁 未命名的 ...

  6. C++ Primer 5th笔记(chap 18 大型程序工具)内联命名空间 (inline namespace)

    1. inline必须出现在命名空间第一次出现的地方 inline namespace FifthEd {//... }//后续再打开命名空间的时候可以写inline也可以不写 namespace F ...

  7. C++ Primer 5th笔记(chap 18 大型程序工具)noexcept

    1. 通过提供 noexcept 说明 ( noexcept specification ) 指定某个函数不会抛出异常. 其形式是关键字 noexcept 紧跟在函数的参数列表后面 {// 紧跟在函数 ...

  8. C++ Primer 5th笔记(chap 18 大型程序工具)异常处理

    1. 异常处理 ( exception handling) 允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理. 异常使得我们能够将问题的检测与解决过程分离开来. 程序的一部分负 ...

  9. C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承

    1. 继承体系中的每个类都可能在某个时刻成为" 最低层的派生类". 只要我们能创建虚基类的派生类对象, 该派生类的构造函数就必须初始化它的虚基类. Bear::Bear (std: ...

最新文章

  1. 【转】qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
  2. MyCAT-1.4-RC性能测试(初步施工)
  3. vue更新数组和对象
  4. Java 集合类图(转)
  5. jsp可以使用iframe_使用 JavaScript object URLs,可以处理图像、音频和视频
  6. 【转】Win7安装Oracle10g经验分享
  7. Python应用实战-如何使用Plotly绘制精美图形?
  8. Linux 到 Windows scp 复制速度慢
  9. 让Internet Explorer成为你的软件集成平台
  10. Android TeaPickerView数据级联选择器
  11. 纳韦斯托克斯方程的推导_这5个改变世界的方程,跟你想的不一样!
  12. Win8.1激活方法
  13. OpenKM文档管理系统开源源码v6.3.9
  14. linux中的计划任务
  15. chrome小恐龙作弊代码
  16. 3D建模和渲染的硬件配置怎么选?这里有答案
  17. 判断今天是星期几 暴力枚举
  18. 【Codeforces 760 B Frodo and pillows】+ 二分
  19. NET Reflector——.NET反编译工具
  20. 360前端校招2019笔试编程题

热门文章

  1. STUN响应消息中添加MAPPED_ADDRESS
  2. 10.线程池与连接池
  3. 【Python】青少年蓝桥杯_每日一题_12.11_开关灯问题
  4. 【阿里云 Linux 服务器】在阿里云购买的 Linux 或者 Windows 服务器,在用 putty 访问的时候不知道用户名密码怎么办?
  5. css怎样将图片设置成正方形,而且随着浏览器窗口大小的改变而自适应缩放
  6. c语言间接级别不同_例9:C语言实现成绩的等级判别
  7. php fstat,PHP函数fstat介绍
  8. 为什么不同新旧UPS电池不能混用?浮充电压是什么?
  9. 成功解决ModuleNotFoundError: No module named ‘minepy.mine‘
  10. Dataset:Big Mart Sales数据集的简介、下载、案例应用之详细攻略