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

2024-03-28 08:38

本文主要是介绍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 大型程序工具)使用命名空间成员的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855073

相关文章

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

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

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

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)