news 2026/5/10 20:00:58

c++ 名称空间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c++ 名称空间

目录

  • 一:简单总结
    • 1、作用(必背)
    • 2、定义语法
    • 3、三种使用方式(最重要)
      • 3.1. 作用域解析符 ::(最安全、最推荐)
      • 3. 2. using 声明(只开放一个成员)
      • 3.3. using namespace 指令(开放整个空间)
    • 4、四大特性
      • 4.1可嵌套
      • 4.2可合并(开放空间)
      • 4.3可起别名
      • 4.4匿名名称空间
    • 5、标准名称空间 std
    • 6、使用规范(考试 / 工程常考)
  • 二、详细理解
    • 1. ::作用域运算符(作用域划分)
    • 2.命名空间
      • 1)名称空间使用语法
      • 2)名称空间只能全局范围内定义(以下错误写法)_______*
      • 3)名称空间可嵌套命名空间
      • 4) 名称空间是开放的,即可以随时把新的成员加入已有的命名空间中
      • 5) 声明和实现可分离
      • 6)无名名称空间,
      • 7)名称空间别名

C++ 名称空间(Namespace)完整知识点

一:简单总结

1、作用(必背)

名称空间又称命名空间。
1.1解决名字冲突:不同模块同名函数 / 变量不打架
1.2划分作用域:让代码结构更清晰
1.3组织大型项目:按模块分类管理

2、定义语法

namespace 空间名 {
变量、函数、类、结构体……
}
示例:

namespaceA{intx=10;voidfun(){}}

3、三种使用方式(最重要)

3.1. 作用域解析符 ::(最安全、最推荐)

cout<<A::x<<endl;A::fun();

3. 2. using 声明(只开放一个成员)

usingA::x;cout<<x<<endl;

3.3. using namespace 指令(开放整个空间)

usingnamespaceA;fun();

⚠️ 注意:头文件里不要写,容易冲突。

4、四大特性

4.1可嵌套

namespaceOuter{namespaceInner{inta=10;}}// 使用:Outer::Inner::a

4.2可合并(开放空间)

namespaceA{inta=1;}namespaceA{intb=2;}// 最终 A 里有 a 和 b

4.3可起别名

namespaceVeryLong=A;VeryLong::x;

4.4匿名名称空间

namespace{intx=100;// 只能本文件用}

5、标准名称空间 std

C++ 标准库都在 std 里:

std::cout<<"hello";// 或usingnamespacestd;cout<<"hello";

6、使用规范(考试 / 工程常考)

头文件 不要 写 using namespace std;
优先使用 空间名::成员
大型项目必须用名称空间划分模块
超级精简总结
作用:防冲突、分模块
访问:空间名::成员(最安全)
关键字:namespace、::、using
特性:嵌套、合并、别名、匿名
标准库:std

二、详细理解

1. ::作用域运算符(作用域划分)

通常情况下,如果有两个同名变量,一个是全局变量,另一个是局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。

//全局变量inta=10;voidtest(){//局部变量inta=20;//全局a被隐藏cout<<"a:"<<a<<endl;//20}

作用域运算符可以用来解决局部变量与全局变量的重名问题

//全局变量inta=10;//1. 局部变量和全局变量同名voidtest(){inta=20;//打印局部变量acout<<"局部变量a:"<<a<<endl;//10//打印全局变量acout<<"全局变量a:"<<::a<<endl;//20}

这个例子可以看出,作用域运算符可以用来解决局部变量与全局变量的重名问题,即在局部变量的作用域内,可用::对被屏蔽的同名的全局变量进行访问。

总结
两个同名变量,一个是全局变量,另一个是局部变量,可用::对被屏蔽的同名的全局变量进行访问

2.命名空间

c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。c++允许我们对名字的产生和名字的可见性进行控制。

1)名称空间使用语法

创建一个命名空间:

namespaceA{inta=10;}namespaceB{inta=20;}voidtest(){cout<<"A::a : "<<A::a<<endl;cout<<"B::a : "<<B::a<<endl;}

2)名称空间只能全局范围内定义(以下错误写法)_______*

voidtest(){namespaceA{inta=10;}namespaceB{inta=20;}cout<<"A::a : "<<A::a<<endl;cout<<"B::a : "<<B::a<<endl;}

3)名称空间可嵌套命名空间

namespaceA{inta=10;namespaceB{inta=20;}}voidtest(){cout<<"A::a : "<<A::a<<endl;cout<<"A::B::a : "<<A::B::a<<endl;}

4) 名称空间是开放的,即可以随时把新的成员加入已有的命名空间中

namespaceA{inta=10;}namespaceA{voidfunc(){cout<<"hello namespace!"<<endl;}}voidtest(){cout<<"A::a : "<<A::a<<endl;A::func();}

5) 声明和实现可分离

头文件

#pragmaoncenamespaceMySpace{voidfunc1();//函数声明,没有定义voidfunc2(intparam);}

.cpp文件

voidMySpace::func1(){cout<<"MySpace::func1"<<endl;}voidMySpace::func2(intparam){cout<<"MySpace::func2 : "<<param<<endl;}

6)无名名称空间,

意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接

namespace{inta=10;voidfunc(){cout<<"hello namespace"<<endl;}}
voidtest(){cout<<"a : "<<a<<endl;func();}

7)名称空间别名

//好像要放在cpp中,//函数定义,不能放在头文件namespaceveryLongName{inta=10;voidfunc(){cout<<"hello namespace"<<endl;}}voidtest(){namespaceshortName=veryLongName;cout<<"veryLongName::a : "<<shortName::a<<endl;veryLongName::func();shortName::func();}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 19:58:56

无线水位远程监测系统简介

无线水位远程监测系统是一种利用无线通信技术实现水位数据实时采集、传输和监控的解决方案&#xff0c;广泛应用于河流、水库、水塔、地下水等场景。一、国科WD300无线水位远程监测系统概述WD300系列无线水位远程监测系统&#xff0c;是用来测量水电站大坝、水库、前池、调压井…

作者头像 李华
网站建设 2026/5/10 19:58:56

初学OpenGL3.3(1)--窗口

一.创建窗口 1.1所需头文件 这是创建窗口并为后续项目所需的头文件 1.2创建main函数 在写好项目所需的头文件后我们开始创建我们的main函数,这个main函数将会帮助我们实例化一个窗口 下面我们来一一分析各句代码的功能 这句代码是为了帮助我们初始化GLFW(一个专门针对OpenG…

作者头像 李华
网站建设 2026/4/17 21:56:50

单片机世界探秘:09 听懂模拟世界的声音——ADC模拟采集全攻略!

09 听懂模拟世界的声音——ADC模拟采集全攻略! 你的Arduino上次刚学会“说话”(UART),今天咱们给它安上一对超级灵敏的耳朵——ADC模拟采集! 从此它再也不是“数字呆瓜”,而是能听懂电位器“扭扭扭”、热敏电阻“热热热”、麦克风“啪啪啪”的感官小天才! 今天全程风趣…

作者头像 李华