C++名称空间

1.传统的C++名称空间

1.1声明空间

在之前的文章中已经讲过了声明和定义的区别,还记得单定义规则吗。

声明区域是可以在其中进行声明的区域。可以在函数外声明全局变量,声明区域为所在的文件;可以在函数中声明,声明区域为所在的文件。

1.2潜在作用域

变量的潜在作用域从声明点开始,到声明区域的结束。因此潜在作用域的大小比其对应的声明区域小。

注意:变量并非在潜在作用域的任何区域都生效,这是因为有隐藏(hide)现象的存在。举例说明在潜在作用域内不一定生效。这可能也就是潜在的含义,是不是很好记

#include<iostream>
using namespace std;
int a=1;//a的潜在作用域从此开始,到最末行
void main(){
for(int i=0;i<10;i++){
	int a = 2;//这里的a隐藏的上面定义的全局变量a
	cout<<a<<endl;
}
}

2.新的名称空间特性

2.1目的

即我们很熟的namespace嘛,为的就是防冲突。

namespace Jack{
int a=1;
}
namespace Jill{
int a=2;
}

2.2 开放特性

在上面声明的两个名称空间中,都有a,但是是从属不同的空间的,因此不会发生冲突。
特性:开放(open),可以把名称加入到已有的名称空间中。举例说明

namespace std{
int cwy = 100;
}

2.3域解析运算符

感觉这个很像对象和结构体或者指针之类的东西嘛。
对象的话我们会用 .这个符号来取值,例如teacher.name
指针的话我们会用->这个符号来取值,例如tree->leftchild
对于名称空间中的名称,可以用::来访问
例如

std::cout<<"哈哈哈";

2.4using声明和using编译指令

using 声明可以将名称空间中的声明添加到其所在的声明区域中(有了文章头的说法应该能懂这意思).
例如

#include<iostream>
using Jill::fetch//全局声明
int main()
{
using Jil::haha//非全局声明
return 0;
}

using编译指令则是与namespace相结合将整个名称空间中的名称都弄来。
例如std,里面有std::cout std::cin等等声明,都可以直接用了。

using namespace std  //这就是平时我们用的很多的

2.5其他特性

1.具有可传递性,下次说明白。
2.可做内部链接性静态变量的替换品,并且更建议这么做(用未命名的名称空间)

3.基于此的编程理念

1.使用再已命名的名称空间中声明的变量,而不是外部全局变量或静态全局变量
2.若开发了一个函数库或类库,将其放在一个名称空间中。
3.不要在头文件中使用using编译指令,这样掩盖了哪些声明可用的目的。(打个五角星)
4.对于using 声明,优先作用域为局部,而不是全局。因为全局很有可能会产生不知的冲突

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值