C++笔记---命名空间(namespace)

1. namespace的定义

通过在全局域内使用namespace关键字可以定义出一个域,这个域跟其他的所有域相互独立,不同的域可以定义同名变量,这样定义出的域也被称作是命名空间。

在命名空间中可以定义变量,结构体,函数,甚至是其他命名空间。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/ 类型出处(声明或定义)的逻辑,有了域隔离,名字冲突就解决了。

局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。

注意:

namespace只能定义在全局,当然它还可以嵌套定义。

项目工程中多文件中定义的同名namespace会认为是⼀个namespace,不会冲突。

C++标准库都放在一个叫std(standard)的命名空间中。

namespace lbz
{int a = 10;int Add(int x, int y){return x + y;}struct Node{struct Node* next;int val;};namespace ShiShen{int a = 0;}
}

上面的代码中定义出了一个叫做“lbz”的命名空间,它包含了一个整形变量a,一个函数Add,一个结构体Node和一个命名空间ShiShen。

在改命名空间外,依然可以用这些名称来对其他变量等进行命名。

2. 访问namespace成员的方法

编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。所以直接使用命名空间中成员的名称会出现报错或者访问到错误的内容。

我们要使用命名空间中定义的变量、函数等,有三种方式:

• 使用作用域操作符(::)对指定命名空间进行访问,项目中推荐这种方式。

cout << a << endl;//优先访问局部
cout << ::a << endl;//只访问全局变量
cout << lbz::a << endl;//只访问指定命名空间的变量
cout << lbz::ShiShen::a << endl;//访问嵌套的命名空间中的变量cout << lbz::Add(1, 2) << endl;//访问函数
struct lbz::Node newnode;//访问结构体类型

注意,对命名空间中的结构体类型进行访问时,访问限定符要放在struct之后,结构体类型名称之前。 

• using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。

//默认使用某个命名空间中的某个变量
using lbz::Node;

 这句代码会使得程序中出现“Node”时,默认其为“lbz::Node”。

• 展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使      用。

//默认使用命名空间std,标准库的命名空间
using namespace std;

2. namespace的作用

在一个较大的项目中,可能会将任务分派给各个项目组,无论是项目组之间,还是项目组内部的成员,都难以避免出现名称重复的现象,项目在整合时就很容易出现bug。

而namespace就相当于在每个变量/函数/类型前加上了前缀,标上了各自的所属,这样就避免了混用名称的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[网络编程】网络编程的基础使用

系列文章目录 1、 初识网络 网络编程套接字 系列文章目录前言一、TCP和UDP协议的引入二、UDP网络编程1.Java中的UDP2.UDP回显代码案例3.UDP网络编程的注意事项 三、TCP网络编程1.TCP回显代码案例2.TCP多线程使用 总结 前言 在学习完基础的网络知识后&#xff0c;完成跨主机通…

元器件基础学习笔记——二极管基础

一、二极管基础 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件&#xff0c;具有单向导电性&#xff0c;是现代电子技术的基石。它在电子电路中扮演着至关重要的角色&#xff0c;通过与电阻、电容、电感等元器件的合理连接&#xff0c;能够实现整流、检波、限幅、稳压等…

Midjourney只需输入描述性文本,就能生成栩栩如生的图像

前言 Midjourney 是一款基于人工智能的图像生成工具&#xff0c;由 Midjourney 研究实验室开发。它最初在2022年3月面世&#xff0c;并在同年7月12日开始公开测试。Midjourney 的核心功能是能够根据用户提供的文本提示&#xff08;prompt&#xff09;&#xff0c;利用其内置的…

【软件测试】--接口自动化测试

1. 接口自动化 1.1 概念 接口测试&#xff1a;是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑依赖关系 自动化测试&#xff1a;是把以人为驱动的测试行为转化为机器执行的一种过程 接口自动化测试&#xff1…

【详细】Ubuntu下安装qt5

Ubuntu下安装qt5 一. QT安装环境准备1、判断gcc是否安装2、安装g3、安装clang编译器4、安装 clang 5、安装make6、安装make-guile7、安装cmake 二. QT5安装1、安装Qt5的组件2、安装Qt的开发工具3、安装qtcreator4、安装qt55、安装qt charts&#xff08;可选&#xff09; 三、安…

国服最强文字转音频?Fish Speech

官网文档与示例 Fish Speech V1.2 是一款领先的文本到语音 (TTS) 模型&#xff0c;使用 30 万小时的英语、中文和日语音频数据进行训练。我尝试用1066运行&#xff0c;但是质量不尽如人意&#xff0c;建议使用RTX系列的显卡进行推理。 使用结果展示 text """20…

企业产品网络安全建设日志0725

文章目录 背景&#xff1a;解决方案 背景&#xff1a; 三方依赖安全风险管理与提升是我司推行的安全策之一略。交由测试部管理负责推进。 前天遇到的挑战是某后端部门排期出现问题&#xff0c;本应该做漏洞提升的时间被其他工作插入。时间有压力自然会想到变通之法。 团队有人…

SpringCloud之使用 Nacos 实现高效购物车商品信息处理

在现代电商系统中&#xff0c;购物车是用户体验的重要组成部分。如何高效地获取购物车中的商品信息&#xff0c;是提高系统性能和用户满意度的关键。今天&#xff0c;我们将探讨如何利用 Nacos 和 RestTemplate 实现这一目标&#xff0c;并通过手写负载均衡来优化服务调用。 步…

SLAM:corners:Measuring Corner Properties-1999【方法解析-2】

paper:Measuring Corner Properties 目录 2.2 方向2.2.1 强度质心2.2.2 梯度质心2.2.3 对称性2.2 方向 2.2.1 强度质心 使用标准矩可以很容易地确定角点的方向(不需要使用矩方法的高阶矩)。定义矩为 m p q = ∑ x , y x p y q

WPF项目实战视频《三》(主要为客户端软件界面设计)

20.WPF项目实战&#xff08;项目介绍&#xff09; 1.WEB API&#xff1a;接口&#xff0c;如何获取数据&#xff08;增删改查&#xff09; 2.客户端 项目功能&#xff1a; 待办&#xff0c;备忘录&#xff0c;汇总&#xff0c;完成比例&#xff0c;设置系统主题等。 21.WPF项…

nodejs与npm版本对应表

Node.js — Node.js 版本 (nodejs.org)

MMCV1.6.0之Runner/Hook/EMAHook (模型 ema)

mmcv/mmcv/runner/hooks/ema.py EMAHook 类是一个用于在训练过程中对模型参数应用指数移动平均 (EMA) 的钩子。EMA是一种平滑技术&#xff0c;通过在每次迭代中更新模型参数的移动平均值&#xff0c;来减小参数更新的波动性。此钩子在 EvalHook 和 CheckpointSaverHook 之前执…

Postman中的灰度发布测试:API部署的稳健之路

Postman中的灰度发布测试&#xff1a;API部署的稳健之路 在软件开发中&#xff0c;灰度发布是一种渐进式的部署策略&#xff0c;它允许新版本的软件逐步向用户推出&#xff0c;从而降低新版本可能带来的风险。Postman作为一个强大的API开发和测试工具&#xff0c;提供了多种功…

Springboot集成微信公众号模板通知java

先看效果 1、微信模板消息官方文档 微信公众平台 2、申请微信公众平台接口测试账号 微信公众平台 3、创建3个实体 &#xff08;1&#xff09;、ConfigBean import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configurat…

python中,jsonpath提取数据的时候出现TypeError: ‘bool‘ object is not subscriptable怎么解决

json格式如下&#xff1a; { success: True, result: { codeInfo: { code: 0, msg: 成功 }, uploadToken: { resId: rzJRpo, endpoint: https://sit-api-ypsx-resource.ypsx-internal.com/r…

stm32入门-----DMA直接存储器存取(上——理论篇)

目录 前言 DMA 1.简介 2.存储器映像 3.DMA结构 4.数据宽度与对齐 5.DMA工作示例 前言 本期我们就开始学习DMA直接存储器存取&#xff0c;DMA是一个数据装运的小助手&#xff0c;执行数据的搬运处理&#xff0c;减少了CPU的负担&#xff0c;在stm32中担当重要的工作。在前…

pypi如何上传自己的代码记录

目录 一. 注册pypi账号并创建token 1. 注册pypi账号并创建token 2. Pypi账号注册 3. 邮箱验证 ​编辑 4. 重新生成恢复代码 5. 输入账号密码 ​编辑 6. 保存code并继续 ​编辑7. 输入一行即可&#xff0c;然后点击verify 8. 点击左方目录内的account setting&#xff…

基于微信小程序的高校排课系统 /基于微信小程序的排课管理系统/课程管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

7月29日,每日信息差

第一、淘宝天猫计划全面优化运费险策略&#xff0c;与合作伙伴进行多轮磋商&#xff0c;部分新政策有望在今年 9 月试运行。策略调整后&#xff0c;商家将获得更多运费险补贴&#xff0c;降低经营成本 第二、三星电子与全国三星电子工会将于 7 月 29 日下午展开为期三天的薪资…

爱快路由的dns强制客户端代理真是个强大的功能

大致情况是这样的&#xff1a;同事说在linux服务器/etc/resolv.conf上随便写个IP地址【不在线的】&#xff0c;dns地址也能解析&#xff0c;让我帮忙查查。 我看了下也感觉纳闷&#xff0c;试了下不光在服务器上&#xff0c;我本地的pc随便设置了个dns解析也是一样的。 通过wir…