news 2026/4/23 11:09:07

名字空间(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/22 17:02:15

异步爬虫防封策略:随机User-Agent与延时

在异步爬虫开发中&#xff0c;高并发带来效率提升的同时&#xff0c;也极易触发目标网站的反爬机制&#xff0c;IP 封禁、请求拦截成为常见问题。随机 User-Agent 伪装与智能动态延时是成本最低、实用性最强的基础防封手段&#xff0c;二者结合可有效降低爬虫特征辨识度&#x…

作者头像 李华
网站建设 2026/4/17 15:58:52

订单系统读写分离方案设计与实现:从背景到问题规避的全流程解析

一、背景&#xff1a;为什么订单系统需要读写分离&#xff1f;1.1 缓存的局限性在电商系统中&#xff0c;Redis常作为MySQL的前置缓存&#xff0c;能有效拦截大量查询请求。然而&#xff0c;这种方案对商品系统、搜索系统等用户无关型系统效果显著&#xff0c;因为所有用户看到…

作者头像 李华
网站建设 2026/4/18 4:17:26

【Vue3 + ECharts 实战】正确使用 showLoading、resize 与 dispose 避免内存泄漏

在开发基于 Vue3 的大屏数据可视化系统时&#xff0c;ECharts 是我们最常使用的图表库之一。然而&#xff0c;若不注意其生命周期管理&#xff0c;很容易出现 图表无法响应窗口缩放、重复加载卡顿、甚至内存泄漏 等问题。本文将结合一个真实的灌区信息化系统代码片段&#xff0…

作者头像 李华
网站建设 2026/4/18 13:35:27

2000-2024年各省互联网、邮电和运输相关指标

为支持区域数字经济、信息基础设施与交通运输体系相关研究&#xff0c;我们整理形成“全国各地区—互联网、邮电和运输181个相关指标&#xff08;2000—2024年&#xff09;”长周期面板数据集。数据以31个省份为统计单元&#xff0c;覆盖2000—2024年 该数据可服务于以下研究方…

作者头像 李华