注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

using编译指令和using声明的区别  

2009-05-26 22:20:23|  分类: C++知识点 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

使用using 编译指令导入一个名称空间中所有的名称与使用多个using 声明是不一样的,而更像是大量使用作用域解析操作符。使用using 声明时,就好像声明了相应的名称一样。如果某个名称己经在函数中声明了,则不能用using 声明导入相同的名称。然而,使用using 编译指令时,将进行名称解析,就像在包含using 声明和名称空间本身的最小声明区域中声明了名称一样。在下面的范例中,名称空间为全局的。如果使用using 编译指令导入一个己经在函数中声明的名称,则局部名称将隐藏名称空间名,就像隐藏同名的全局变晕一样、不过仍可以以像下面的范例中那样使用作用域解析操作符:

namespace Jill

{

double bucket (double n ) {… }

double fetch;

struct Hill { ……} ;

}

Char fetch ; / / global namespace

int main()

{

using namespace Jill;

Hill Thrill;

double water = bucket( 2 ) ;

double fetch;

cin >> fetch;

cin >> : : fetch ;

}

 

int foom ( )

{

Hill top;

Jill : : Hill crest;

}

在main() 中,名称JiIl::fetch 被放在局部名称空间中,但其作用域不是局部的,因此不会覆盖全局的fetch 。然而,局部声明的feteh 将隐藏Jill : : fetch 和全局feteh 。不过,如果使用作用域解析操作符,则后两个fetch 变量都是可用的。读者应将这个范例与前面使用using 声明的范例进行比较。

    需要指出的另一点是,虽然函数中的using 编译指令将名称空间的名称视为在函数之外声明的,但它不会使得该文件中的其他函数能够使用这些名称。因此,在前一个例子中,foom ( )函数不能使用未限定的Hill 标识符。

    记住:假设名称空间和声明区域定义了相同的名称。如果试图使用using 声明将名称空间的名称导入该声明区域,则这两个名称会发生冲突,从而出错。如果使用using 编译指令将该名称空间的名称导入该声明区域,则局部版本将隐藏名称空间版本。

一般说来,使用using 声明比使用using编译指令更安全,这是由于它只导入指定的名称。如果该名称与局部名称发生冲突,编译器将发出指示。using 编译指令导入所有名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不会发出警告。另外,名称空间的开放性意味着名称空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。

下面是本博文所范例采用的方法:

#include<iostream> { int main ( )

usinq namespace std;

首先,# i nclude 语句将头文件iostream 放到名称空间std 中。然后,using 编译指令是该名称空间在mainO 函数中可用。有些范例采取下述方式:

#include<iostream>

using namespace std ;

int main ( )

{

这将名称空间std 中的所有内容导出到全局名称空间中。使用这种方法的主要原因是方便。它完成起来比较简单,同时如果系统不支持名称空间,可以将前两行替换为:

#include < iostream.h >

不过,名称空间的支持者希望有史多的选择,既可以使用解析操作符,也可以使用using声明。也就是说,不要这样做:

using namespace std ;

而应这样做:

int x;

std : : cin >> x;

std : : cout<<x<<Std::endl;

或者这样做:

usinq std::cin;

using std::cout;

using std::endl;

1nt x:

cout < < x < < endl;

可以用嵌套式名称空间来创建一个包含常用using 声明的名称空间。

 

  评论这张
 
阅读(316)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018