news 2026/4/21 2:45:14

名字空间(namespace)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
名字空间(namespace)
  • 最初C++标准中并没有名字空间,要求程序中全局作用域中声明的变量、函数、类型等必须具有唯一的名字
  • 如果在同一个程序中有两个名字相同的全局变量将产生命名冲突(和C语言一样)
  • 如果程序中引入第三方库就必须保证程序中定义的全局名都不能与所用库中的名字相同,否则就会产生冲突,这就是所谓的全局名字空间污染问题,该问题在大型程序中处理起来非常困难。
  • 为此引入了名字空间。在一个名字空间中,可以定义许多不同对象,并将这些对象的有效范围局限在名字空间内。不同名字空间中,可以定义相同名称的对象,只要两个同名对象不在同一名字空间中,就不会引起冲突

名字空间的定义

  • 语法格式
namespacexxx_name{members;}
  • 举例
namespaceABC{intnum;structstu{intage;char*name;};doubleadd(inta,intb){return(double)a+b;}intMin(inta,intb){returna>b?a:b;}}

如果使用cout或cin必须有using namespace std;

名字空间成员的访问

  • 名字空间成员的访问有主要有三种方法:

通过作用域限定符(::)

#include<iostream>usingnamespacestd;namespacens1{voidfunc(void){cout<<"ns1 func"<<endl;}}namespacens2{voidfunc(void){cout<<"ns2 func"<<endl;}}intmain(void){ns2::func();ns1::func();return0;}

using引用名字空间单个成员

#include<iostream>usingnamespacestd;namespacens1{voidfunc(void){cout<<"ns1 func"<<endl;}}namespacens2{voidfunc(void){cout<<"ns2 func"<<endl;}}intmain(void){usingns1::func;ns2::func();//ns1::func();func();return0;}

using引用名字空间全部成员

#include<iostream>usingnamespacestd;namespacens1{voidfunc(void){cout<<"ns1 func"<<endl;}inta=100;}namespacens2{inta=200;voidfunc(void){cout<<"ns2 func"<<endl;}}intmain(void){usingnamespacens1;ns2::func();//ns1::func();func();cout<<a<<endl;return0;}

无名名字空间

  • 未命名的名字空间称作无名名字空间
#include<iostream>//using namespace std;namespacens1{voidfunc(void){std::cout<<"ns1 func"<<std::endl;}inta=100;}namespacens2{inta=200;voidfunc(void){std::cout<<"ns2 func"<<std::endl;}}namespace{//无名名字空间inta=300;}intmain(void){//using namespace ns1;ns2::func();ns1::func();std::cout<<ns1::a<<std::endl;std::cout<<::a<<std::endl;//无名名字空间成员的引用return0;}

名字空间嵌套

  • 指定义在其他名字空中的名字空间
#include<iostream>usingnamespacestd;namespacens1{voidfunc(void){std::cout<<"ns1 func"<<std::endl;}inta=100;namespacens2{intb=111;}}intmain(void){cout<<ns1::ns2::b<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 5:00:21

消息队列与发布订阅区别,如何选择topic和queue

在现代软件系统中&#xff0c;topic和queue是实现异步通信和解耦服务组件的基础模型。理解它们的核心区别与适用场景&#xff0c;是构建高效、可靠系统架构的关键。本文将从实际应用出发&#xff0c;剖析两者的工作机制与选择策略。 消息队列与发布订阅的本质区别 消息队列&…

作者头像 李华
网站建设 2026/4/20 3:20:22

【工具】AI 原生基础设施知识库

jimmysong.io —— AI 原生基础设施知识库 从云原生技术博客转型而来的个人网站&#xff0c;现已成为专注于AI原生基础设施的系统性知识平台与工具导航站。 核心定位&#xff1a;为开发者提供构建下一代AI系统&#xff08;特别是以大语言模型和智能体为核心的应用&#xff09…

作者头像 李华
网站建设 2026/4/4 9:21:49

[STM32L5] 【STM32L562E_DK开发板】--4.LCD显示

本篇讲述驱动LCD显示。 一.原理 开发板使用204*240 RGB LCD。原理如下 二.代码准备 1.GPIO引脚配置如下&#xff0c;主要是复位引脚、背光引脚、电源控制引脚。 2.LCD FMC接口配置 至此&#xff0c;实现硬件引脚配置。后面以STM32Cube MCU Packages安装包下的BSP库为…

作者头像 李华
网站建设 2026/4/18 12:11:33

看完就会:10个AI论文工具测评!MBA毕业论文写作+格式规范全攻略

在当前学术研究日益数字化的背景下&#xff0c;MBA学员在撰写毕业论文时面临诸多挑战&#xff1a;从选题构思到文献综述&#xff0c;从数据整理到格式规范&#xff0c;每一步都可能成为影响效率的关键节点。尤其在AI技术广泛应用的今天&#xff0c;如何选择一款真正能提升写作效…

作者头像 李华
网站建设 2026/4/20 12:47:45

冗余标准:企业如何构建接入、汇聚与交换系统全栈冗余体系

制定接入系统冗余标准、设计汇聚层冗余架构、统一交换系统冗余标准 摘要 为企业IT部门、信息化负责人及运维团队提供核心价值&#xff1a;通过标准化的全栈冗余体系建设&#xff0c;结合可视化运行监控系统&#xff0c;支撑ICT系统规划、标准化交付与平台化运维&#xff0c;实…

作者头像 李华
网站建设 2026/4/19 5:50:24

日志禁用提示原因与启用方法

在处理生产环境问题时&#xff0c;我们经常遇到“logging is disabled”这类提示。这通常意味着日志记录功能被意外或有意地关闭&#xff0c;导致关键的运行时信息、错误堆栈和调试线索丢失&#xff0c;使故障排查变得异常困难。理解其背后的原因并掌握重新启用日志的方法&…

作者头像 李华