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. Java 多线程之 synchronized 和 volatile 的比較

    概述 在做多线程并发处理时,常常须要对资源进行可见性訪问和相互排斥同步操作.有时候,我们可能从前辈那里得知我们须要对资源进行 volatile 或是 synchronized 关键字修饰处理.但是,我 ...

  2. EJB学习笔记之十(BMT事务和CMT事务)

     1.前言 前两篇博客主要介绍了与事务相关的知识.比如事务的一些特性,以及并发产生的问题.本篇来解说一下EJB中两种处理事务的方式.一种是以生命式方式来管理事务(CMT):还有一种则是在EJB内部使用 ...

  3. 攻克了Cocoapods Undefined symbols for architecture _OBJC_CLASS_xxxx的问题,辛苦死我了,记录下之后有空在研究

    网上找了一大包将尽3个小时没有解决,原本以为是我升级到10.10的原因,把cocoapod 重装 stackoverflow google 用尽了也不知道为啥 结果是这个样子的 编译出现这个.... ...

  4. android 调用系统界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  5. 基于python的ardrone control源码分析与心得

    这里有一段python代码,可用于操控ardrone 2.0.实验室曾经借鉴用过,并添加了部分功能.如今复习一下,顺便理理python的相关知识点. #!/usr/bin/env python # A ...

  6. Visual studio C++ MFC之列表控件CListCtrl Control

    背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...

  7. html&css基础框架

    原文地址:http://www.w3cplus.com/framework/index.php

  8. android推送方式

    本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息. ...

  9. JanusGraph与Cassandra集成模式

    //如果使用的是cassandra 2.2或更高版本,需要开启thift,以使janus连接到cassandra. ./bin/nodetool enablethrift. 15.1 Local Se ...

  10. Java实现XSS防御

    XSS概述 跨站脚本攻击(Cross Site Scripting),缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行, ...