C++语言导学 第三章 模块化 - 3.4 名字空间

C++语言导学 第三章 模块化 - 3.4 名字空间

3.4 名字空间

除了函数、类和枚举之外,C++还提供了一种称为名字空间(namespace)的机制,用来表达某些声明属于一个整体以及它们的名字不会与其他名字冲突。例如,我希望利用自己定义的复数类型进行实验:

namespace My_code{
	class complex{
		//...
	};
	complex sqrt(complex);
	//...
	int main();
}
int My_code::main()
{
	complex z{1, 2};
	auto z2 = sqrt(z);
	std::cout<<{<<z2.real()<<,<<z2.imag()<<}\n”;
	//...
}
int main()
{
	return My_code::main();
}

通过将我的代码放在名字空间My_code中,就可以确保我的名字不会与名字空间std中的标准库名字冲突。这种预防措施是明智的,因为标准库的确提供了complex算术运算。

访问另一个名字空间中的名字,最简单的方法是用名字空间的名字对其进行限定(例如std::cout和My_code::main)。“真正的main()”定义在全局名字空间中,换句话说,它不属于任何自定义的名字空间、类或者函数。

如果反复对一个名字进行限定变得令人乏味、分散注意力,我们可以使用using声明将名字引入作用域中:

void my_code(vector<int>& x, vector<int>& y)
{
	using std::swap;		//使用标准库swap
	//...
	swap(x, y);				//std::swap()
	other::swap(x, y);		//其他某个swap()
	//...
}

using声明令来自一个名字空间中的名字变得可用,就如同它声明在当前作用域中一样。我们使用using std::swap后,就像是已在my_code()中声明了swap一样。

为获取标准库名字空间中所有名字的访问权,我们可以使用using指示:

using namespace std;

using指示的作用是将具名名字空间中未限定的名字变得在当前作用域中可访问。因此,对std使用using指示之后,我们直接使用cout就可以了,无须再写std::cout。使用using指示后,我们就失去了选择性地使用名字空间中名字的能力,因此必须小心使用这一特性,通常是用在一个库遍布于应用中时(如std)或是在转换一个未使用namespace的应用时。

名字空间主要用于组织较大规模的程序组件,例如库。名字空间简化了用单独开发的组件组合程序的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hank_W

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

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

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

打赏作者

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

抵扣说明:

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

余额充值