c++ 名称空间

1.名词

声明区域:可以在其中进行声明的区域
潜在作用域:从声明点开始,到声明区域结尾
作用域:变量对程序而言可见的范围
如下图所示,可以看出各个变量的不同作用域。
在这里插入图片描述

2.using声明

1.如下代码中,使用using Jill::fetch可以将fetch添加到局部声明区域中,这会使全局变量fetch失效,所以最后输出的结果是9.

namespace Jill{
	double bucket(double n) { return 1; }
	double fetch = 9;
	struct Hill {};
}
int fetch = 8;
int main()
{
	using Jill::fetch;
	cout << fetch;
}

tip:
1)namespace 不可以定义在代码段中,意味着不可以放在main函数中
2)不可以同时

using Jill::fetch;
using Jack::fetch;

会报错,使fetch有两个含义;
3)使用using::fetch相当于定义一个局部变量,不能再在该代码段中定义同名变量:
如下所示,定义double fetch会报错

int main()
{
	using Jill::fetch;
	double fetch;  # 报错
	cin >> fetch;
	cout << fetch;
}

4)多使用 using std::cin 而不是using namespace std

2.如果多名称相互嵌套,可以使用 如下命名方式来简化这种嵌套

namespace elements{
	namespace fire {
		char flame;
	}
	char water;
}
char fetch;
int main()
{
	cin >> elements::fire::flame;
	namespace hot_fire = elements::fire;
	cin >> hot_fire::flame;
}

3.不定义名称,用作静态全局变量,将链接性转为内部。

namespace{
	int ice;
}
static int ice;

4.在名称空间中声明的函数名的作用域为整个名称空间,因此定义和声明必须位于同一个名称空间中,这正是名称空间的开放性发挥作用的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rookiexxj01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值