C++ 名字空间(namespace)

C++支持多种作用域,包括全局域、局部域、块域、类域和名字空间域,以隔离变量并防止命名冲突。局部域和块域中的变量在特定区域内有效,而类域允许成员间相互访问。全局域可能导致命名冲突,名字空间域则用于解决这个问题,通过定义不同的命名空间来避免冲突。using关键字可用于简化对名字空间内成员的引用。
摘要由CSDN通过智能技术生成

        C++支持多种作用域:全局域局部域块域类域,还有名字空间域等。

        作用域:规定变量能够被访问的范围,离开这个范围的变量不能被访问。

        作用域是一个独立的地盘,让变量不会暴露出去,也就是说作用域最大的作用就是隔离变量,不同作用域中同名的变量不会冲突。

参考:http://t.csdn.cn/f8RzC

        局部域:局部变量所在位置,比如 函数体、for循环循环体 等。局部变量的生存期只在局部域中,程序退出局部域,局部变量就消亡

        块域:一对花括号之间的区域,比如 if语句的花括号中的语句体。块域中变量生存期从定义处开始,在块域结束时消亡

        类域:我们自定义的class,其中的成员属性和成员方法就在其类域中。

        (1)在类中成员可以任意相互使用 ,如fun()可直接调用fun2()。在类外,就需要通过 "对象.成员"  的方法,才能调用对象的公有属性或公有方法。

        (2)在类中直接定义的函数,无需在函数名前加上作用域解析符 (类名::);在类中声明,在类外定义的函数,在类外定义时,需要加上作用域解析符。

        全局域:main主程序之外,到整个项目的多个文件的范围。若多个源文件中使用了同名不同实体的全局变量,就会发生命名冲突(全局名字空间污染)。

//a.h
extern int g_max;
extern void fun();
//a.cpp
int g_max = 10;
void fun(){
	cout << g_max << endl;
}

//b.h
extern int g_max;
extern void fun();
//b.cpp
int g_max = 200;
void fun(){
	cout << g_max << endl;
}

        此时,若同时引用 a.h 和 b.h ,就发生了变量或函数重定义(命名冲突)。

        为了能使用同名但不同实体的变量,避免命名冲突,C++引入了名字空间域

        名字空间域为解决全局变量命名冲突,将可能与其他全局变量或函数命名冲突的全局变量或函数放到自己的名字空间中。

        (1)使用时需 名字空间名::变量/函数:: 是作用域解析符,标识右边的变量或函数是属于哪个名字空间的。

         (2)也可以使用 using 名字空间::变量名/函数名 的方法,指定该变量名或函数就是指定名字空间中的变量或函数,可以直接使用。

        但不能重复指定。

        (3)使用 using namespace 名字空间名。这样就可以直接使用该名字空间中变量或函数。但不能存在其他与该名字空间中命名冲突的全局变量。

          命名空间可嵌套命名空间:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值