C++命名空间

在C++中支持三种域:局部域、名字空间域和类域。

名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开

头给它起一个名字

花括号括起来的部分称声明块。声明块中可以包括:类变量(带有初始化)、函数(带有定义)等。最外层的名字空间域称为全局名字空间域

即文件域。

名字空间域的引入,主要是为了解决全局名字空间污染(global namespace pollution)问题,即防止程序中的全局实体名与其他程序中的全局实

体名,命名冲突。

//1.普通的命名空间
namespace cao
{
	int g_max = 10;
	int g_min=0;
	int my_add(int a,int b){ return a+b;}
}
// 2.名字空间域可分层嵌套,同样有分层屏蔽作用
namespace Primer
{
    double pi = 3. 1415926535898;
	double my_add(double a,double b) { return a + b;}
	namespace Matrix
	char my_max(char a,char b) { return a>b? a:b;}
}
//3.同一个工程中允许存在多个相同名称的命名空间
//编译器最后会合成同一个命名空间中。
namespace cao
{	
    float pi = 3.14;
	int my_sub(int a,int b);
	g_min=a-b;
	return g_min;
}

1.使用using将名字空间中成员引入(using声明

使用using声明可只写一次限定修饰名。 using声明以关键字using开头,后面是被限定修饰的名字空间成员名:

using cao::pi;
using Primer::Matrix::my_max;
//名字空间类成员matrix的using声明
//以后在程序中使用matrix时,就可以直接使用成员名,而不必使用限定修饰名。
int main()
{
    printf("%1f\n",Primer::pi);
	printf("%f\n",pi); // cao::
	my_max('a','b');
	return 0;
}

2.使用using namespace名字空间名称引入(using编译指令

使用using指示符可以一-次性地使名字空间中所有成员都可以直接被使用,比using声明方便。

using指示符;以关键字using开头,后面是关键字namespace,然后是名字空间名。

using namespace cao;
int main()
{
	printf("%1f\n" ,Primer::pi) ;
	printf("%f\n",pi);// cao::
	my_add(12,23); // cao::
	return 0;
}

使用using声明比使用using编译指令更安全,这是由于它只导入指定的名称。由于该名称与局部名称发生冲突,编译器将发出指示。

使用using编译指令导入所有名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不

会发出警告。

3.未命名的名称空间

可以通过省略名称空间的名称来创建未命名的名称空间

namespace    //未命名
{
    int ice;
    int bandycoot;
}

不能在未命名名称空间所属文件之外的其他文件中,使用该名称空间中的名称。这提供了连接性为内部的静态变量的替代品

总结:

  • 不要在头文件中使用using编译指令,这样会掩盖哪些名称可用,而且包含头文件的顺序可能影响程序的行为。如果非要使用using编译指

    令,应放在#include之后

  • 导入名称时,首选域名解析符或using声明的方法

  • 对于using声明,将其作用域设置为局部而不是全局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小新 蜡笔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值