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

2024-03-28 08:38

本文主要是介绍C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 大型程序工具) 重载与命名空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/855075

相关文章

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象