using 关键字的使用
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 关键字的使用的更多相关文章
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- java面向对象中的关键字
1,super关键字 super:父类的意思 1. super.属性名 (调用父类的属性) 2. super.方法名 (调用父类的方法) 3. super([参数列表])(调用父类的构造方法) 注意: ...
- 关于javascript中的this关键字
this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...
- transient关键字的用法
本篇博客转自 一直在路上 Java transient关键字使用小记 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Core Java 总结(关键字,特性问题)
2016-10-19 说说&和&&的区别 初级问题,但是还是加入了笔记,因为得满分不容易. &和&&都可以用作逻辑与的运算(两边是boolean类型), ...
- Net中的常见的关键字
Net中的关键字有很多,我们最常见的就有new.base.this.using.class.struct.abstract.interface.is.as等等.有很多的,在这里就介绍大家常见的,并且有 ...
- php多关键字查询
php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...
- Keil> 编译器特有的功能 > 关键字和运算符 > __weak
__weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...
随机推荐
- Zend Framework(一) windows8.1下配置zend framework1.12
windows8.1下配置zend framework1.12配置步骤: 1. 下载 zend framework1.12库 2. 创建zend frameworkproject 2 ...
- Django——如何处理请求(URL配置和视图)
URLconfig—— 为了绑定视图函数和URL,我们使用URLconf. URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间 ...
- 去除前后空格,Oracle和SQLSERVER都适用。ltrim(rtrim(’ ‘))
Oracle自带去除方法:trim(). 但是sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格. 合起来用就是sql的trim()函数,即select lt ...
- Lomboz插件的介绍 下载 安装 问题
http://www.blogjava.net/javaandcc/articles/251334.html Lomboz是Eclipse的一个主要的开源插件(open-source plug-in) ...
- HDU 4421 Bit Magic(2-sat)
HDU 4421 Bit Magic pid=4421" target="_blank" style="">题目链接 题意:就依据题目,给定b数 ...
- Java设计模式-代理模式之动态代理(附源代码分析)
Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...
- ansible远程切换用户执行命令
ansible test -l 10.0.10.1 -e "ansible_become_user=www" -m shell -a "/data/publish/pub ...
- usb转串口模块下载时遇到的问题
ch340g usb转TTL模块,烧写wifi模块ESP8266固件时,为图省事,我直接用的该模块的3.3v电为wifi模块供的电,结果刚一上电就出现串口模块消失(听到噔的一声),电脑设备管理器里就看 ...
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结
Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1.1. C# 1.0-纯粹的面向对象 1.2. C# 2.0-泛型编程新概念 1.3. ...
- Asp.net 数据库依赖那些事
声明:本文为作者原创文章,转载请注明出处 https://www.cnblogs.com/MaMaNongNong/p/8904022.html 问题背景: 最近做一个非常简单的功能,就是使用ajax ...