C++中,using指示与using声明的区别 简单明了

1 using 声明

using 声明的作用域等同于本条using声明语句所在的作用域

从效果上看就好像using声明语句为命名空间的成员在当前作用域中创建了一个别名一样” ——《C++ primer》5th
 

int i = 1;
 
namespace NS
{
     int i = 2;
}
 
void f()
{
      cout << i <<  endl;  //输出1,指的是全局作用域中定义的i
      using N::i;          //从该语句开始的当前作用域中,所有 i 指的均是 NS::i
      cout << i << endl;  //输出2
      int i = 3;   //错误,重定义i
}

2 using 指示

A using directive does not declare local aliases. Rather, it has the effect of lifting
the namespace members into the nearest scope that contains both the namespace
itself and the using directive 《C++ Primer》 5th

英文版的描述感觉更清楚一些,也就是说using指示会将这个namespace内的所有成员的作用域(可见性)提升到一个具有如下特点的作用域中:

这个作用域范围必须是能够包含住  <namespace定义本身所在的作用域,以及using语句所在作用域> 的最近的公共父作用域

格式: using namespace + space name

namespace NS1
{
	namespace NS2  //命名空间本身的作用域为 NS1
	{
		int   i = 2;
	}
	namespace NS3
	{
		namespace NS4
		{
			void f()
			{
				using namespace NS2;   //using 指示的作用域是 f()函数体
				cout << i << endl;
                int i= 3;// 正确,这里的i指的是f中的局部变量i
			}
		}
	}
}
//using 指示的作用域是f()函数体, 它所指示的命名空间是NS2,NS2的作用域是NS1, NS2和f()的最近共同
//作用域是NS1, 所以应用using指示后,NS2中的所有成员就好像定义在NS1中一样

 

也就是说 using指示的作用域是using指示这条语句本身所在的作用域(f())和它所指示的命名空间(NS2)的作用域的最近公共作用域(NS1)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值