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. 云计算之路-阿里云上-阵雨:RDS故障的突袭

    风雨之后是彩虹,经历了三个月的风雨之后,从6月14日起(上次故障发生于6月13日)开始享受彩虹...而今天突袭而来的RDS故障让我们懂得了彩虹期间会有阵雨,但不管怎么样,离“晴空万里”越来越近了. 2 ...

  2. JsonFX 序列化反序列化

    /// <summary> /// Json 序列化工具类 /// </summary> public class SerializeJsonUtility { /// < ...

  3. C++ 字符串转化成浮点型

    第一种: char  szString[] = "3.1415926535898"; double db1; db1 = atof(szString); printf(" ...

  4. NYOJ1097 Ugly Numbers 【丑数】

    Ugly Numbers 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 Ugly numbers are numbers whose only prime fact ...

  5. INSTALL_FAILED_OLDER_SDK

    Uploading file local path: /Users/Rubert/Android/workspace/MyApplication/app/build/outputs/apk/app-d ...

  6. linux之getopt 函数(转)

    命令行参数解析函数 —— getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const ar ...

  7. 【BIEE】17_仪表盘提示中值按顺序显示

    我们在使用仪表盘提示的时候,常常会遇到这种问题,客户需要将一些常见的放在最上边,这样方便显示 例如:现在有数据库表如下 我们需要在提示中展示机构名称,我们如下新建提示 展示效果如下: 我们从上图可以看 ...

  8. 帮朋友转发招聘信息 南京知名互联网公司招聘java、测试、前端,具体私聊

    一.java开发 1.5年及以上J2EE方向开发经验 2.精通spring等开源框架 3.熟悉html.javascript.css.jsp/freemarker.jquery的使用 4.熟悉使用my ...

  9. Oracle 存储过程调用返回游标的另一个存储过程。

    一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...

  10. jrebel license server 激活方法

    方法1: 使用已经封装好的jar包,保持一直运行即可(放到服务器上). 链接:https://pan.baidu.com/s/1rrn-6F26JpD5RSsbJV3-hQ 密码: dscu 服务器上 ...