1. using 声明或 using 指示能将某些函数添加到候选函数集

2.
对于接受类类型实参的函数来说, 其名字查找将在实参类所属的命名空间中进行。在这些命名空间中所有与被调用函数同名的函数都将被添加到候选集当中, 即使其中某些函数在调用语句处不可见也是如此

namespace NS {class Quote { / … / };void display (const Quotes) { / . .. */ }
}//Bulk_item 的基类声明在命名空间 NS 中
class Bulk_item : public NS::Quote { / ... / };int main ( ) {Bulk_item bookl;display (bookl);return 0;
}

2.1 重载与 using 声明

using 声明语句声明的是一个名字, 而非一个特定的函数

using NS::print; //正确: using声明只声明一个名字
using NS::print (int ); //错误:不能指定形参列表

一个using声明囊括了重载函数的所有版本以确保不违反命名空间的接口

一个using声明引入的函数将重载该声明语句所属作用域中已有的其他同名函数。

如果using声明出现在局部作用域中, 则引入的名字将隐藏外层作用域的相关声明。

如果 using 声明所在的作用域中己经有一个函数与新引入的函数同名且形参列表相同, 则该 using 声明将引发错误。

除此之外, using 声明将为引入的名字添加额外的重载实例,并最终扩充候选函数集的规模。

2.2 重载与 using 指示

using 指示将命名空间的成员提升到外层作用域中, 如果命名空间的某个函数与该命名空间所属作用域的函数同名, 则命名空间的函数将被添加到重载集合中

namespace libs_R_us {extern void print(int);extern void print(double);
}
void print(const std::string &);using namespace libs_R_us;
// using directive added names to the candidate set for calls to print:
// print(int) from libs_R_us
// print(double) from libs_R_us
// print(const std::string &) declared explicitly
void fooBar(int ival)
{print("Value: "); // calls global print(const string &)print(ival); // calls libs_R_us::print(int)
}

2.3 跨越多个 using 指示的重载

如果存在多个 using 指示, 则来自每个命名空间的名字都会成为候选函数集的一部分

eg.
在全局作用域中, 函数 print 的重载集合包括 print (int ) 、 print (double ) 和print (long double), 尽管它们的声明位于不同作用域中, 但它们都属于 main 函数中 print 调用的候选函数集

namespace AW {int print(int);
}
namespace Primer {double print(double);
}// using directives:
// form an overload set of functions from different namespaces
using namespace AW;
using namespace Primer;
long double print(long double);int main() {print(1); // calls AW::print(int)print(3.1); // calls Primer::print(double)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. 命名空间内部名字的查找规则 由内向外依次查找每个外层作用域. 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止. 只有位于开放的块中且在使用点之前声明的名字才被 ...

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

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

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

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

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

    1. 问题:命名空间污染 namespace pollution 多个库将名字放置在全局命名空间 1.1 一般人的解决方法 起长名字 eg. class cplusplus_primer_Query ...

  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. 图像处理包括哪些东东?
  2. Linux centos6.5 64下oracle10g_静默安装完整版
  3. 取input 输入_tensorRT动态输入(python)
  4. Angular4 组件通讯方法大全
  5. access手工注入笔记
  6. 深入浅出谈cuda 书_入门和基础——9本关于美学的书
  7. sql server:查詢系統表
  8. matlab 0-100随机数,添加到100的随机数:matlab
  9. 2019年中国IaaS公有云市场排名及份额出炉
  10. JavaScript实现MVVM之我就是想监测一个普通对象的变化
  11. 大家知道,我的废话很多,所以来凑热闹
  12. 关于 epoch、 iteration和batchsize
  13. Visio2010安装和卸载
  14. EfficientDeRainy:一种高效的图像去雨雾算法
  15. 用antd实现番茄钟
  16. dota自走棋设置上海服务器位置,Dota2自走棋怎么设置国服 让你轻松进入国服
  17. 斯坦福的“计算广告学”
  18. 什么是IoT、IT、OT、CT
  19. oracle显示上午下午,如何把时间转换成带有上下午字样的格式?
  20. qlaber 中放置图片_我准备了60个案例,教你彻底搞定PPT图片排版!

热门文章

  1. mac mysql使用_在Mac中安装和使用MySQL
  2. 什么是工装服_王俊凯穿连体工装亮相跨年晚会,中国风满满的设计,尽显帅气...
  3. 底部菜单 点击突起_iOS开发之上下文交互菜单(UIContextMenuInteraction)
  4. 成功解决AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
  5. Bug总结:python语言中出现的import error错误的解决思路
  6. SWIG:SWIG的简介、安装、使用方法之详细攻略
  7. Dataset之JFT:JFT/FastEval14k数据集的简介、下载、案例应用之详细攻略
  8. ML:人工智能之机器学习ML解决实际应用问题的思路总过程(最全)
  9. TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录
  10. SQL Server如何查看存储过程的执行计划