详解 c++ 中的 namespage
C++ 中的命名空间很特别,其他编程语言基本都没有。命名空间介于函数与类之间,兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。
文章目录
- **1. 什么是 `namespace`(命名空间)?**
- **2. 语法**
- **3. 使用 `namespace` 访问成员**
- **4. `using` 关键字**
- **4.1 `using namespace`(引入整个命名空间)**
- **4.2 `using` 声明(引入特定成员)**
- **5. `namespace` 的嵌套**
- **6. `namespace` 的匿名命名空间**
- **7. `namespace` 的别名**
- **8. `std::` 命名空间**
- **9. `namespace` 的扩展**
- **总结**
1. 什么是 namespace
(命名空间)?
在 C++ 中,namespace
(命名空间)用于组织代码,避免全局作用域的 命名冲突。它允许开发者在不同的作用域中定义相同名称的变量、函数或类,而不会发生冲突。
2. 语法
namespace myNamespace {int value = 42;void myFunction() {std::cout << "Hello from myNamespace!" << std::endl;}
}
myNamespace
是命名空间的名称。- 命名空间中的变量、函数、类等,都需要通过
myNamespace::
访问。
3. 使用 namespace
访问成员
可以通过 作用域解析符 ::
访问命名空间中的变量和函数:
#include <iostream>namespace myNamespace {int value = 42;void myFunction() {std::cout << "Hello from myNamespace!" << std::endl;}
}int main() {std::cout << myNamespace::value << std::endl; // 访问命名空间变量myNamespace::myFunction(); // 访问命名空间函数return 0;
}
输出:
42
Hello from myNamespace!
4. using
关键字
4.1 using namespace
(引入整个命名空间)
可以使用 using namespace
直接引入整个命名空间,这样就可以省略 myNamespace::
:
#include <iostream>namespace myNamespace {int value = 42;void myFunction() {std::cout << "Hello from myNamespace!" << std::endl;}
}int main() {using namespace myNamespace;std::cout << value << std::endl; // 直接访问变量myFunction(); // 直接访问函数return 0;
}
注意:
using namespace
会引入命名空间内的所有成员,可能导致 命名冲突。- 通常 不建议在头文件中使用
using namespace
,而是在特定范围(如函数内)使用。
4.2 using
声明(引入特定成员)
如果只想引入命名空间中的某个特定成员,可以使用 using
后跟双引号::
引入特定成员语句:
#include <iostream>namespace myNamespace {int value = 42;void myFunction() {std::cout << "Hello from myNamespace!" << std::endl;}
}int main() {using myNamespace::value; // 只引入 `value`std::cout << value << std::endl;// myFunction(); // ❌ 错误,因为没有引入 `myFunction`myNamespace::myFunction(); // ✅ 正确,需要显式访问return 0;
}
5. namespace
的嵌套
命名空间可以嵌套:
namespace Outer {namespace Inner {void sayHello() {std::cout << "Hello from Inner namespace!" << std::endl;}}
}int main() {Outer::Inner::sayHello(); // 访问嵌套命名空间的函数return 0;
}
6. namespace
的匿名命名空间
匿名命名空间用于限制作用域,使其中的变量和函数只在当前文件可见,类似于 static
关键字的作用:
#include <iostream>namespace {int secret = 100;void hiddenFunction() {std::cout << "This is a hidden function." << std::endl;}
}int main() {std::cout << secret << std::endl; // ✅ 只能在当前文件访问hiddenFunction(); // ✅ 只能在当前文件访问return 0;
}
匿名命名空间的作用:
- 其中的成员只能在当前文件中访问,不会被外部文件链接(类似
static
作用域)。 - 通常用于防止命名污染。
7. namespace
的别名
如果命名空间名称过长,可以使用 namespace
别名:
#include <iostream>namespace MyVeryLongNamespaceName {void myFunction() {std::cout << "Hello from MyVeryLongNamespaceName!" << std::endl;}
}namespace ShortName = MyVeryLongNamespaceName; // 取别名int main() {ShortName::myFunction(); // 通过别名访问return 0;
}
- 可以重命名,这是 namespace 跟 class 的一个区别。
8. std::
命名空间
C++ 标准库中的所有组件(如 cout
、vector
、string
)都在 std
命名空间中:
#include <iostream>
#include <vector>int main() {std::cout << "Hello, World!" << std::endl;std::vector<int> vec = {1, 2, 3};return 0;
}
如果不想每次都写 std::
,可以使用:
using namespace std;
但注意:
- 在大型项目中,
using namespace std;
可能会引入太多符号,导致命名冲突,不建议在头文件中使用。 - 但可以放在函数的开始位置。
9. namespace
的扩展
命名空间可以在不同文件或代码块中扩展:
namespace MyNamespace {int value = 10;
}// 扩展 `MyNamespace`
namespace MyNamespace {void sayHello() {std::cout << "Hello from MyNamespace!" << std::endl;}
}int main() {std::cout << MyNamespace::value << std::endl;MyNamespace::sayHello();return 0;
}
总结
关键点 | 说明 |
---|---|
作用 | 组织代码,防止命名冲突 |
访问方式 | namespace_name::member |
using namespace | 引入整个命名空间(不推荐在头文件使用) |
using 声明 | 只引入某个成员 |
嵌套命名空间 | namespace A { namespace B { ... } } |
匿名命名空间 | 作用于当前文件,防止外部访问 |
别名 | namespace Short = LongNamespace; |
命名空间扩展 | 可以在不同文件中继续定义相同命名空间 |
✅ 最佳实践
- 尽量避免
using namespace
在全局作用域,尤其是std
,防止冲突。 - 使用命名空间别名来简化长命名空间的使用。
- 匿名命名空间可用于定义只在当前文件可见的变量或函数,增强封装性。
相关文章:
详解 c++ 中的 namespage
C 中的命名空间很特别,其他编程语言基本都没有。命名空间介于函数与类之间,兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。 文章目录 **1. 什么是 namespace(命名空间)?****2. 语法****3. 使用 namespace 访…...
Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载
一、前言说明 在做这个功能的时候,着实费了点心思,好在之前做ffmpeg加密解密的时候,已经打通了极速加密保存文件,主要就是之前的类中新增了进度提示信号,比如当前已经处理到哪个position位置,发个信号出来…...
Idea 和 Pycharm 快捷键
一、快捷键 二、Pycharm 中怎么切换分支 参考如下 如果在界面右下角 没有看到当前所在的分支,如 “Git:master” 3. 有了 4....
在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南
随着人工智能技术的飞速发展,本地部署大型语言模型(LLM)已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私,还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2(24GB 内存)上部署 DeepS…...
2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头&#x…...
【R包】pathlinkR转录组数据分析和可视化利器
介绍 通常情况下,基因表达研究如微阵列和RNA-Seq会产生数百到数千个差异表达基因(deg)。理解如此庞大的数据集的生物学意义变得非常困难,尤其是在分析多个条件和比较的情况下。该软件包利用途径富集和蛋白-蛋白相互作用网络&…...
基于大模型的脑出血全周期预测与诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、大模型预测脑出血的原理与技术基础 2.1 大模型概述 2.2 脑出血相关数据收集与预处理 2.3 机器学习算法在预测模型中的应用 2.4 模型训练与优化 三、术前风险预测与准备 3.1 术前…...
高数1.1 函数
1. 定义 1.1 函数 1.2 反函数 1.2.1 求反函数例题 1.3 基本初等函数和初等函数 1.4 基本函数性质...
Java常见设计模式(中):结构型模式
🌈 引言:设计模式就像乐高积木 适配器:让不同形状的积木完美拼接装饰器:给积木添加炫酷灯光效果代理:遥控积木完成复杂动作组合:将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系ÿ…...
【Python修仙编程】(二) Python3灵源初探(3)
第一部分:乾坤袋的秘密与修炼之路 在修仙界,有一个古老的传承,名为《Python无极心法》,它蕴含着强大的力量,能够助修仙者突破重重境界,领悟宇宙天地的奥秘。而要修炼此心法,必须先从基础的“乾…...
Mac本地部署Deep Seek R1
Mac本地部署Deep Seek R1 1.安装本地部署大型语言模型的工具 ollama 官网:https://ollama.com/ 2.下载Deepseek R1模型 网址:https://ollama.com/library/deepseek-r1 根据电脑配置,选择模型。 我的电脑:Mac M3 24G内存。 这…...
可以免费无限次下载PPT的网站
前言 最近发现了一个超实用的网站,想分享给大家。 在学习和工作的过程中,想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量,但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制࿰…...
c++作业
练习题: #include <iostream> #include <cstring> using namespace std;class mystring {char* p;int len; public:mystring();mystring(const char* p);~mystring();void copy(const mystring& str);void append(const mystring& str);void sh…...
补题蓝桥杯14届JavaB组第4题
算法:动态规划 需要两个一维数组来进行dp 一个用来记录到当前位置的最短时间,另一个用来记录到达当前位置传送门的最短时间 到达传送门的时间需要进行判断,如果上一次传送到达传送门,需要判断上一次传送到这的位置在当前传送门…...
DeepSeek 15天指导手册——从入门到精通 PDF(附下载)
DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载: https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…...
【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
C#开发——时间间隔类TimSpan
TimeSpan 是 C# 中的一个结构( struct ),用于表示时间间隔或持续时间。它位于 System 命名空间中,是处理时间相关操作时非常重要的工具,尤其是在计算两个日期或时间之间的差值、表示时间段或执行时间相关的运算…...
第002文-kali虚拟机安全与网络配置
1、kali系统介绍 kali是一个基于Linux kernel的操作系统,由BackTrack(简称BT)发展而来。BackTrack是2006年推出的一个用于渗透测试及黑客攻防的专用平台,基于Knoppix(linux的一个发行版)开发。BackTrack版本周期:2006年的起始版本BackTrack …...
【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案
【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案 一、前言 目前应用上架华为AGC平台,都会被要求适配折叠屏设备。目前华为系列的折叠屏手机,有华为 Mate系列(左右折叠,华为 Mate XT三折叠),华为Pocket 系列…...
关于“你对 Spring Cloud 的理解”
Spring Cloud 是一个基于 Spring Boot 的微服务框架,旨在简化分布式系统的开发、部署和管理。它提供了一系列工具和组件,帮助开发者构建和管理微服务架构。以下是对 Spring Cloud 的核心理解: 1. 微服务架构的支持 Spring Cloud 提供了对微…...
微信小程序-二维码绘制
wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…...
c++中如何打印未知类型对象的类型
在 C 中要打印未知类型对象的类型名称,可以通过以下方法实现: 目录 方法一:使用 typeid 和 name()(需包含 ) 使用示例: 问题与改进: 方法二:编译时类型名称(C17 起&…...
SpringBoot集成easy-captcha图片验证码框架
SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!! 一、引言 验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码…...
Materials Studio MS2020在linux系统上的安装包下载地址 支持centos Ubuntu rocky等系统
下载地址:MS2020-linux官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 Materials Studio 2020是一款功能强大的材料科学计算模拟软件,以下是其详细介绍: 核心模块功能 CASTEP模块:采用平面波赝势方法,适用于周…...
DeepSeek 开源狂欢周(二)DeepEP深度技术解析 | 解锁 MoE 模型并行加速
在大模型时代,Mixture-of-Experts (MoE) 模型凭借其强大的容量和高效的计算能力,成为研究和应用的热点。然而,MoE 模型的训练和推理面临着巨大的专家并行通信挑战。近日,DeepSeek 开源了 DeepEP 项目,为解决这一难题提…...
Kylin麒麟操作系统 | 系统监控
以下所使用的环境为: 虚拟化软件:VMware Workstation 17 Pro 麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、系统状态查询工具 1. 静态显示系统进程信息ps ps命令会生成一个静态列表,列表中显示的进程其…...
mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql
一 问题描述 工作中经常遇到这种模糊匹配的慢sql: select * from 表名 where 字段 like %字符串%; 由于前面有%,导致无法走该字段上的索引。 二 解决办法 ① 给该字段创建一个全文索引 CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名); ② 改写sq…...
基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets
简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库,内置超过 150 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例(Qt6 也支持),将 libQFluentWidgets.d…...
事件【Qt】
文章目录 事件 事件 event label.cpp #include "label.h" #include<QDebug> Label::Label( QWidget * parent):QLabel(parent) {}void Label::enterEvent(QEvent *event) {//显式地忽略 event 参数,表示函数内部不会使用 event 参数,也不会对其进…...
若依vue plus环境搭建
继前面文章若依系统环境搭建记录-CSDN博客 把ruoyi vue plus也摸索了下。 作者是疯狂的狮子,dromara/RuoYi-Vue-Plus 初始化文档:项目初始化,环境搭建的视频:RuoYi-Vue-Plus 5.0 搭建与运行_哔哩哔哩_bilibili 上来就列出了一…...
算法题(80):环形链表II
审题: 需要我们判断链表是否带环,若带环,需要我们返回进入环的第一个节点地址 思路: 方法一:set 每个节点的地址都是唯一的,所以我们的set存的是节点地址。 当我们遍历链表时, 若节点地址没有存…...
Spring Boot集成Jetty、Tomcat或Undertow及支持HTTP/2协议
目录 一、常用Web服务器 1、Tomcat 2、Jetty 3、Undertow 二、什么是HTTP/2协议 1、定义 2、特性 3、优点 4、与HTTP/1.1的区别 三、集成Web服务器并开启HTTP/2协议 1、生成证书 2、新建springboot项目 3、集成Web服务器 3.1 集成Tomcat 3.2 集成Jetty 3.3 集成…...
ISO 15118,最新版,汽车充电桩相关标准,1~22子标准
ISO 15118 是一项国际标准,主要规定了电动汽车(EV)与充电桩(EVSE)之间的通信协议,涵盖了充电过程中的信息交换、安全认证、充电控制等内容。以下是其主要内容: 1. 通信协议 V2G通信:…...
信息系统项目管理师考试介绍和学习资料分享
信息系统项目管理师考试是评估考生在信息系统项目管理领域的专业知识和技能的重要考试。以下是对信息系统项目管理师考试的详细介绍: 拥有软考信息系统项目管理师高级证的作用: 提高求职竞争力: 信息系统项目管理师证书是国家级证书&#…...
基于 Spring AI 的 HIS 系统智能化改造
【Spring AI 的背景与现状】 Spring AI 是 Spring 生态里整的一个新活儿,专门给开发者提供搞 AI 驱动的应用的工具和框架。虽然 Spring AI 已经鼓捣了挺长时间,但截至现在(2025年2月),它还没正式发布。不过࿰…...
visual studio 2022安装教程及下载(附安装包)visual studio 2022下载安装教程图文详情
文章目录 前言一、visual studio 2022下载二、visual studio 2022安装教程三、软件设置四、安装完成 前言 Visual Studio 2022 作为强大的集成开发环境,深受开发者青睐。但初次安装,其复杂步骤易让人摸不着头脑。为帮大家顺利安装,本文将详细…...
Nginx+PHP+MYSQL-Ubuntu在线安装
在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下: 1. 更新系统包 首先,确保系统包是最新的: sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx: sudo apt install nginx启动并启用 Nginx 服务: sudo…...
【Excel】 Power Query抓取多页数据导入到Excel
抓取多页数据想必大多数人都会,只要会点编程技项的人都不会是难事儿。那么,如果只是单纯的利用Excel软件,我还真的没弄过。昨天,我就因为这个在网上找了好久发好久。 1、在数据-》新建查询-》从其他源-》自网站 ,如图 …...
spring boot 2.7 + seata +微服务 降级失败问题修复
文章引流 一个简单而使用的API管理工具 版本号 spring boot 2.7.17 spring-cloud-dependencies 2021.0.8 spring-cloud-circuitbreaker-resilience4j 2.1.7 spring-cloud-starter-alibaba-seata 2021.1 jdk 1.8原因分析 未配置属性 feign.circuitbreaker.enabledtrue # 未…...
Ubuntu 22.04 安装Nvidia驱动加速deepseek
一键安装22.04 nvidia 驱动 nvidia 官网下载驱动我的环境是NVIDIA RTX A5000nvidia 文档参考没有安装驱动之前确认自己的型号 lspci | grep -i vga (如数字2231) 参考docker 支持nvidia ,注释了需要的取消注释即可 42行-92行一定要重启服务器…...
【Java项目】基于Spring Boot的校园博客系统
【Java项目】基于Spring Boot的校园博客系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:校园博客系统是一个典型的管理系统,主要功能包括管理员:首页、个人中心、博主管理、文章分类管理、文章信息…...
centos7 离线安装docker
1.下载docker Index of linux/static/stable/x86_64/ 2.安装docker tar -zxvf docker-19.03.9.tgz cp -p docker/* /usr/bin 创建docker服务配置文件docker.servicevim /etc/systemd/system/docker.service [Unit] DescriptionDocker Application Container Engine Docume…...
基于Rook的Ceph云原生存储部署与实践指南(上)
#作者:任少近 文章目录 1 Ceph环境准备2 rook部署ceph群集2.1 Rook 帮助地址2.2 安装ceph2.3 获取csi镜像2.4 Master参加到osd2.5 设置默认存储 3 Rook部署云原生RBD块存储3.1 部署storageclass资源3.2 部署WordPress使用RBD3.3 WordPress访问 4 Rook部署云原生RGW…...
微服务合并
有的团队为了节约机器成本、有的团队为了提升研发效率、有的团队为了降低人均服务数 微服务合并,可以从多个角度入手 代码重构融合:人工拷贝代码、解决冲突,然后分阶段实施迁移重构。代码合并打包:将多个代码仓库,拉取…...
Linux中子线程会继承父线程对相关变量的可见性
在 Linux 的 POSIX 线程模型中,当父线程修改全局变量后创建子线程,子线程一定会看到修改后的最新值。这是由线程的内存共享机制和线程创建时序保证的,具体原理如下: 关键机制解析 内存共享本质: 所有线程共享相同的全局数据段修改操作直接作用于物理内存,无副本存在cint …...
道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金
道可云元宇宙每日简报(2025年2月26日)讯,今日元宇宙新鲜事有: 上海青浦发布国际产业协作元宇宙平台 近日,“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台,…...
5.11 PEFT重参数化方法:低秩分解的微调革命
PEFT重参数化方法:低秩分解的微调革命 一、重参数化技术全景图 mindmap root((重参数化方法)) LoRA "低秩矩阵分解" "参数冻结策略" AdaLoRA "动态秩调整" "重要性采样" QLoRA "量化低秩分解" "NF4量化策…...
vscode 版本
vscode官网 Visual Studio Code - Code Editing. Redefined 但是官网只提供最新 在之前的版本就要去github找了 https://github.com/microsoft/vscode/releases 获取旧版本vscode安装包的方法_vscode 老版本-CSDN博客...
自然语言处理NLP深探
1. NLP 的定义、特点、具体工作、历史和流派 定义:自然语言处理(Natural Language Processing,NLP)是计算机科学与人工智能领域的一个重要分支,旨在让计算机理解、处理和生成人类自然语言,实现人与计算机之间用自然语言进行有效通信。特点 交叉性:涉及计算机科学、语言学…...
【leetcode hot 100 15】三数之和
一、两数之和的扩展 class Solution {public List<List<Integer>> threeSum(int[] nums) {// 将得到的结果存入Set中,保证不重复Set<List<Integer>> set new HashSet<>();// 模拟两数之和,作为第一个循环中的内容for(in…...