C++ 命名空间

最新推荐文章于 2025-03-10 23:29:06 发布
转载 最新推荐文章于 2025-03-10 23:29:06 发布 · 110 阅读
· 0
· 0 ·
CC 4.0 BY-SA版权
原文链接:https://www.runoob.com/cplusplus/cpp-namespaces.html

C++ 专栏收录该内容
9 篇文章
订阅专栏

C++ 命名空间

假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

定义命名空间

命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

namespace namespace_name { // 代码声明 }

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:

name::code; // code 可以是变量或函数

让我们来看看命名空间如何为变量或函数等实体定义范围:

实例

#include <iostream> using namespace std;

// 第一个命名空间
namespace first_space{
void func(){
cout << “Inside first_space” << endl;
}
}
// 第二个命名空间
namespace second_space{
void func(){
cout << “Inside second_space” << endl;
}
}
int main ()
{

// 调用第一个命名空间中的函数
first_space::func();

// 调用第二个命名空间中的函数
second_space::func();

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space
Inside second_space

using 指令

您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

实例

#include <iostream> using namespace std;

// 第一个命名空间
namespace first_space{
void func(){
cout << “Inside first_space” << endl;
}
}
// 第二个命名空间
namespace second_space{
void func(){
cout << “Inside second_space” << endl;
}
}
using namespace first_space;
int main ()
{

// 调用第一个命名空间中的函数
func();

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space

using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 std 命名空间中的 cout 部分,您可以使用如下的语句:

using std::cout;

随后的代码中,在使用 cout 时就可以不用加上命名空间名称作为前缀,但是 std 命名空间中的其他项目仍然需要加上命名空间名称作为前缀,如下所示:

实例

#include <iostream> using std::cout;

int main ()
{

cout << “std::endl is used with std!” << std::endl;

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

std::endl is used with std!

using 指令引入的名称遵循正常的范围规则。名称从使用 using 指令开始是可见的,直到该范围结束。此时,在范围以外定义的同名实体是隐藏的。

不连续的命名空间

命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。

所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:

namespace namespace_name { // 代码声明 }

嵌套的命名空间

命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:

namespace namespace_name1 { // 代码声明 namespace namespace_name2 { // 代码声明 } }

您可以通过使用 :: 运算符来访问嵌套的命名空间中的成员:

// 访问 namespace_name2 中的成员 using namespace namespace_name1::namespace_name2;

// 访问 namespace:name1 中的成员
using namespace namespace_name1;

在上面的语句中,如果使用的是 namespace_name1,那么在该范围内 namespace_name2 中的元素也是可用的,如下所示:

实例

#include <iostream> using namespace std;

// 第一个命名空间
namespace first_space{
void func(){
cout << “Inside first_space” << endl;
}
// 第二个命名空间
namespace second_space{
void func(){
cout << “Inside second_space” << endl;
}
}
}
using namespace first_space::second_space;
int main ()
{

// 调用第二个命名空间中的函数
func();

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inside second_space
确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
jiaolu☞
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
C++命名空间的定义、C++命名空间的使用、C++输入&输出等的介绍
Farewell_me的博客
06-08 1453
C++命名空间的定义、C++命名空间的使用、C++输入&输出等的介绍。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员int a = 0;int val;命名空间内可以定义变量,函数,类型等命名空间内定义的变量,函数,类型等与在全局/局部变量定义一样。命名空间结尾不需要加分号。int a = 0;int val;同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
实例讲解C++ 命名空间
08-18
C++ 命名空间实例讲解 C++ 命名空间是 C++ 编程语言中的一种机制,用于解决函数、类、变量等命名冲突的问题。它可以作为附加信息来区分不同库中相同名称的函数、类、变量等。 定义命名空间的语法使用关键字 ...
参与评论 您还未登录,请先 登录 后发表或查看评论
C++命名空间
2302_78829275的博客
01-15 1839
命名空间:使用 `std::cout` 时的 `::` 表示使用 `std` 命名空间中的 `cout`。全局变量:可以用 `::` 来区分全局变量和局部变量。类中的使用:`::` 用于访问类的成员函数或静态变量。
C++命名空间namespace
weixin_73162565的博客
06-01 1513
本文以生活中的例子切入,帮助初学者更好地理解 namespace 的作用,同时讲解其用法,此外讲解两个 特殊的 namespace,以及提供一些使用建议。
c++命名空间
热门推荐
习惯有你
11-07 1万+
命名空间的由来 命名空间(namespace),是c++引入的一种机制,namespace目的是用来解决全局变量名与函数名或函数名与函数名之间名称相同的冲突的。c语言没有namespace,从c扩展而来的c++早期也没有,后来的c++、java、python都使用了这种技术,甚至在一些高级语言中把namespace设计得更好。 一个客观的事实就是一个庞大的项目,如linux内核,内部上万个.c文件,变量与函数名称重名是不能避免的,如同在中国,重名太正常不过了。本节我们就是...
C++命名空间详解
2301_80224556的博客
03-26 2347
一个命名空间的定义包含两部分;首先是关键字 namespace,随后是命名空间的名字。在命名空间名字后面是一系列由花括号括起来的声明和定义。注意末尾不需要分号namespace 命名空间名//声明,定义}//命名空间结束没有分号,这和块类似只要能出现在全局作用域中的声明就能置于命名空间内,主要包括:类、变量(及其初始化操作)、函数(及其定义)、模板和其他命名空间:和其他名字一样,命名空间的名字也必须在定义它的作用域内保持唯一。int a;int a;//错误,重复定义。
c++ 命名空间
qq_27344469的博客
04-07 1347
命名空间是c++中一个简单的知识点,主要原因是为了解决名字冲突的,例如链接的时候模块A有个a,模块B也有个a,这样名字就会冲突,个人看来程序是人类日常生活中的映射,比如,生活中有同名的人,例如一个班级有同名的同学,那老师为了区分就会加入某些特性,eg:男xx,女xx,大xx,小xx,高个子xx,矮个子xx,等等,而c++语言引入命名空间,为了解决名字冲突的问题; 再或者一个大型项目,由若干个人进行开发,名字命名不可用避免的会有充分的情况,这样加上命名空间,就可以解决这样的问题; ...
C++命名空间(详解)
z0108_999的博客
06-03 1658
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名。
编程视界:C++命名空间
m0_74696257的博客
03-10 1190
对于初学者来说,如果对一个命名空间中的实体并不熟悉时,直接使用这种方式,有可能还是会造成名字冲突的问题,而且出现错误之后,还不好查找错误的原因,比如下面的程序就会报错,当然该错误是人为造成的。使用匿名空间中实体时,可以直接使用,也可以加上作用域限定符(没有空间名),但是如果匿名空间中定义了和全局位置中同名的实体,会有冲突,即使使用::作用域限定符也无法访问到匿名空间中重名的实体,只能访问到全局的实体。要注意,在同一作用域内用using声明的不同的命名空间的成员不能有同名的成员,否则会发生重定义。
深入理解C++命名空间
2201_76062618的博客
07-29 1338
本文主要讲解C++命名空间
c++命名空间无效代码demo
11-24
C++命名空间是C++编程语言中的一个重要特性,它允许将代码划分为不同的作用域,这样可以避免名称冲突。在实际开发过程中,合理使用命名空间可以提高代码的可读性和可维护性。然而,若在使用命名空间时出现错误,可能...
C++ 命名空间相关资料.md
01-14
### C++ 命名空间知识点总结 在C++中,命名空间是一种封装事物名称空间(如类、函数等)的方法,以避免在不同项目中编写代码时发生名称冲突。命名空间的概念是为了解决诸如变量、函数和类等实体之间的名称冲突问题...
HTML页面中文字属性的详细设置方法
08-02
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 HTML页面中文字属性的设置主要包括文字字体、文字大小、文字颜色、文字段落行间距、文字的粗体、斜体、下划线、上划线以及删除线等。这些属性设置通常用于对页面中特定部分的文字进行个性化调整。经过测试,这些设置在Internet Explorer 8浏览器和Opera浏览器中能够正常生效。
sqlite-jdbc-3.43.2.1.jar中文-英文对照文档.zip
08-02
1、压缩文件中包含: 中文-英文对照文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。 2、使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 3、特殊说明: (1)本文档为人性化翻译,精心制作,请放心使用; (2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; (3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 4、温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。 5、本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。
基于微信小程序的城市选择
最新发布
08-02
资源下载链接为: https://pan.quark.cn/s/b4f7a8dbf1d1 基于微信小程序的城市选择(最新、最全版本!打开链接下载即可用!)
人工智能时代个人计算机的安全防护科普系统-cl98b307【附万字论文+PPT+包部署+录制讲解视频】.zip
08-02
人工智能时代个人计算机的安全防护科普系统-cl98b307【附万字论文+PPT+包部署+录制讲解视频】.zip
spring-jdbc-3.2.8.RELEASE.jar中文-英文对照文档.zip
08-02
1、压缩文件中包含: 中文-英文对照文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。 2、使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 3、特殊说明: (1)本文档为人性化翻译,精心制作,请放心使用; (2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; (3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 4、温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。 5、本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。
PPT倒计时加载宏(沈兵版)工具
08-02
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 PPT倒计时加载宏是一款运行于Microsoft Office PowerPoint的计时类插件。自2009年12月开始开发,该软件历经多次改进与优化,操作愈发简便,效果也更为出色。它适用于以PowerPoint演示文稿为基础的会议、演讲、论坛、竞赛、考试等多种场景,具备计时、提醒、事件处理等功能,界面设计新颖,功能十分强大,在同类软件中应用范围最广。
jiaolu☞

博客等级

码龄7年
53
原创
289
点赞
1351
收藏
176
粉丝
关注
私信

热门文章

  • 解决方案:VS2019:There‘s no Qt version assigned to project sdlpct.vcxproj for configuration Debug/x64. 25663
  • MATLAB中Robotics Toolbox(机器人工具箱)的安装 25363
  • DIY智能小车篇(一):结构模块 24803
  • 尺寸公差和形位公差 17546
  • 解决方案:Win10和Linux双系统配对蓝牙设备 9926

分类专栏

  • 电机驱动器开发
    3篇
  • Coin3D
    4篇
  • 解决方案
    20篇
  • 笔记
  • 系统及软件安装
    9篇
  • 设计模式
    1篇
  • Python
    2篇
  • QT
    6篇
  • C++
    9篇
  • ROS学习
    6篇
  • Github
    3篇
  • MYSQL
    2篇
  • 随笔
    1篇
  • C语言学习
    1篇
  • Linux学习
    2篇
  • 个人小项目
    5篇

展开全部 收起

上一篇:
C++之PIMPL模式
下一篇:
解决方案:VS2019+QT5.15中文显示乱码问题

最新评论

  • 解决方案:Win10和Linux双系统配对蓝牙设备

    老享: 鼠标设置成功了,但是蓝牙耳机只能连上Linux,不能连接windows

  • 解决方案:VS2019:There‘s no Qt version assigned to project sdlpct.vcxproj for configuration Debug/x64.

    dwjwlxs123: 扩展-Qt-Vs-Tools

  • MATLAB中Robotics Toolbox(机器人工具箱)的安装

    科尔维特雨晨川: 不太对,换了其他的方法表情包

  • 解决方案:Coin3D安装编译以及配合VS2019、QT的使用

    cp_frame: 全部编译通过了。Simage是真难搞,还要用其他的交叉编译器编译,套娃式依赖库

  • 解决方案:配置CLion用于STM32开发

    DSP_dangerous people: 去openocd目录的target里面,stm32f4x.cfg文件里面,有三个adapter speed,大概在69、135、140行左右,这三个值的默认值分别是2000、8000、2000,报错中提示你需要分别改成1800、4000、1800,改完就可以啦

大家在看

  • 【实习总结】Qt通过Qt Linguist(语言家)实现多语言支持
  • DeepWiki01-项目依赖 420
  • Python自动化测试 583
  • @# Spire.Office for Java 10.7.0 #@ 1322
  • Java开发中敏感信息加密存储全解析:筑牢数据安全防线

最新文章

  • CPLD和FPGA的区别和联系
  • 伺服电机编码器为什么要调零或校正
  • 无刷电机和电子调速器(ESC)是如何工作的
2022年7篇
2021年33篇
2020年11篇
2019年18篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
C++之PIMPL模式
下一篇:
解决方案:VS2019+QT5.15中文显示乱码问题

分类专栏

  • 电机驱动器开发
    3篇
  • Coin3D
    4篇
  • 解决方案
    20篇
  • 笔记
  • 系统及软件安装
    9篇
  • 设计模式
    1篇
  • Python
    2篇
  • QT
    6篇
  • C++
    9篇
  • ROS学习
    6篇
  • Github
    3篇
  • MYSQL
    2篇
  • 随笔
    1篇
  • C语言学习
    1篇
  • Linux学习
    2篇
  • 个人小项目
    5篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值