using 关键字的使用主要分为两种类型:using declaration(using 声明)和using directive(using 命令):

using 声明:引入特定名称空间中的一个成员。

using 命令:使特定名称空间中的所有名字可见。

 namespace Myspace
{
int a = ;
double b = 100.0;
const int c = ;
} int var = ;
// 位置1 int main()
{
// 位置2
double b = 200.0;
int d = c + ;
++a;
++::a; return ;
}

将using 声明和using 命令分别插入<位置1>和<位置2>,会发生什么情况呢?如下分析:

(1)   在<位置1>插入using 声明:

 namespace Myspace
{
int a = ;
double b = 100.0;
const int c = ;
} int a = ;
9 // 位置1: 插入using 声明
using Myspace::a; /** error: 'a' is already declared in this scope */
using Myspace::b;
using Myspace::c; int main()
{
// 位置2
double b = 200.0; /** 局部 b */
int d = c + ; /** d = Myspace::c + 1 */
++a; /** 二义性 */
++::a; /** ++a */ return ;
}

说明:

将名称空间Myspace中所有成员的using 声明放在<位置1>,则a、b、c立即在<位置1>处变为可见,接着程序中有定义了变量a,此时,必然会发生重定义错误。main函数中的局部变量b则会屏蔽全局变量Myspace::b,因此可以编译通过。

(2)   在<位置2>插入using 声明:

 namespace Myspace
{
int a = ;
double b = 100.0;
const int c = ;
} int a = ;
// 位置1 int main()
{
13 // 位置2: 插入using 声明
using Myspace::a;
using Myspace::b;
using Myspace::c; double b = 200.0; /** error: redeclaration of 'double b' */
int d = c + ; /** d = Myspace::c + 1 */
++a; /** ++Myspace::a */
++::a; /** ++a */ return ;
}

说明:

将a、b、c的using 声明移到<位置2>,此时,b相当于定义了两次,编译错误。此时的a有两个值,++a表示访问函数局部的a,也就是Myspace::a,因为Myspace::a把全局的a屏蔽掉了。而++::a意为显示访问全局变量。

(3)   在<位置1>插入using 命令:

 namespace Myspace
{
int a = ;
double b = 100.0;
const int c = ;
} int a = ;
9 // 位置1: 插入using 命令
using namespace Myspace; int main()
{
// 位置2
double b = 200.0; /** 局部 b */
int d = c + ; /** Myspace::c */
++a; /** reference to 'a' is ambiguous*/
++::a; /** ++a */ return ;
}

说明:

++a由于不知调用Myspace::a还是a,因此,出现二义性,可以考虑改为++Myspace::a,而++::a意义非常明确。

(4)   在<位置2>插入using 命令:

 namespace Myspace
{
int a = ;
double b = 100.0;
const int c = ;
} int a = ;
// 位置1 int main()
{
13 // 位置2: 插入using 命令
using namespace Myspace; double b = 200.0; /** 局部 b */
int d = c + ; /** Myspace::c */
++a; /** reference to 'a' is ambiguous*/
++::a; /** ++a */ return ;
}

说明:

解释同(3)。

using 关键字的使用的更多相关文章

  1. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  2. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  3. java面向对象中的关键字

    1,super关键字 super:父类的意思 1. super.属性名 (调用父类的属性) 2. super.方法名 (调用父类的方法) 3. super([参数列表])(调用父类的构造方法) 注意: ...

  4. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

  5. transient关键字的用法

    本篇博客转自 一直在路上 Java transient关键字使用小记 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Core Java 总结(关键字,特性问题)

    2016-10-19 说说&和&&的区别 初级问题,但是还是加入了笔记,因为得满分不容易. &和&&都可以用作逻辑与的运算(两边是boolean类型), ...

  8. Net中的常见的关键字

    Net中的关键字有很多,我们最常见的就有new.base.this.using.class.struct.abstract.interface.is.as等等.有很多的,在这里就介绍大家常见的,并且有 ...

  9. php多关键字查询

      php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...

  10. Keil> 编译器特有的功能 > 关键字和运算符 > __weak

    __weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...

随机推荐

  1. 利用forever在Linux上实现Node.js项目自启动

    在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台执行,尽管不能直接用node命令搞定,可是在安装了forever这个包以后.还是非常轻松的.只是要是在远程ser ...

  2. Jersey 1.18 API文档

    Jersey 1.18 API文档 我自己制作了Jersey 1.18 API CHM文档, 下载地址见: http://download.csdn.net/detail/chszs/7334869 ...

  3. iOS即时通讯输入框随字数自适应高度

    代码地址如下:http://www.demodashi.com/demo/13210.html 前言 本人最近在研究socket与聊天界面的UI,在写聊天界面UI的时候是模仿微信的界面其中的文字输入框 ...

  4. Cocos2dx报OpenGL error 0x0506错误

    近期做第三方sdk接入时,发现iOS8系统下,进行银联充值后,返回游戏有很大几率会报 OpenGL error 0x0506............ 之类的绘制问题,游戏卡死,花了很长时间,一直没有头 ...

  5. centos7单机版安装hbase

    1.首先安装jdk1.8 yum install java-1.8.0-openjdk* -y 2.下载hbase 地址:http://mirrors.shuosc.org/apache/hbase/ ...

  6. 一个关于git push失败的解决方案

    问题背景:在GitHub上创建了一个repositorie, 本地初始化并添加了远程仓库后,在GitHub上创建了一个README.md文件(注意不是从本地git push上去的),随后本地修改工程源 ...

  7. Java中有几种类型的流?以及常见的实现类都有哪些?

    Java中有几种类型的流?以及常见的实现类都有哪些? 首先应该从两个角度来看: 从输入输出方面来讲:       Java中有输入流和输出流 从流的编码方式上来讲:    Java中有字节流和字符流 ...

  8. cef

    http://blog.csdn.net/hats8888/article/details/53886591 http://blog.csdn.net/gong_hui2000/article/det ...

  9. SecureCRT中的vim出现1H特殊字符

    问题原因:由于采用了UTF_8编码方式导致的. 解决方法:把字符编码改为:GB18030即可.如图:

  10. (转载)Javascript removeChild()不能删除全部子节点的解决办法

    在Javascript中,只提供了一种删除节点的方法:removeChild().removeChild() 方法用来删除父节点的一个子节点. 语法: parent.removeChild(thisN ...