关于using声明与using编译指令 c++
来源:互联网 发布:linux sqlplus 安装 编辑:程序博客网 时间:2024/06/06 21:40
c++ primer plus书中提到using声明与using编译指令,或者称为using指令。
using std::cin; 这就是一个using声明,就像一个普通的声明。以后提到cin时就指的是std里面的。
using namespace std;这就是一个using指令,导入所有std里面的应用。
“一般来说,使用using声明会更安全。因为,using声明只导入指定的名称,如果该名称与局部名称发生冲突,编译器会报错。而using指令导入整个命名空间中的所有成员的名称,包括那些可能根本用不到的名称,如果其中有名称与局部名称发生冲突,则编译器并不会发出任何警告信息,而只是用局部名去自动覆盖命名空间中的同名成员。特别是命名空间的开放性,使得一个命名空间的成员,可能分散在多个地方,程序员难以准确知道,别人到底为该命名空间添加了哪些名称。”
理解为:使用using指令时,如果代码块中有重名的变量,则会用局部变量名覆盖命名空间中的同名成员,而不会报错。
使用using声明时,遇到上述情况,编译器会报错。
重名的变量将使程序员很难区分,引起歧义。故,使用using声明是个不错的方法,况且它仅仅导入需要的成员,必然占用资源较少。
示例1:
- C/C++ code
- namespace myname
- { int n = 7; }
-
- int main()
- {
- using myname::n;
- int n = 5; return 0; }
编译出现错误:error C2374: “myname::n”: 重定义;多次初始化
符合这句话:“using声明只导入指定的名称,如果该名称与局部名称发生冲突,编译器会报错。”
示例2:
- C/C++ code
- namespace myname
- { int n = 7; }
- int main()
- {
- using namespace myname;
- int n = 5;
- return 0;
- }
编译正确。
符合这句话:
“而using指令导入整个命名空间中的所有成员的名称,包括那些可能根本用不到的名称,如果其中有名称与局部名称发生冲突,则编译器并不会发出任何警告信息,而只是用局部名去自动覆盖命名空间中的同名成员。”
总结:使用的时候尽量使用using声明,去声明将会使用的一些类和对象,比如using std::cin;等,尽量避免在全局使用using编译指令,如using namespace std;
- 关于using声明与using编译指令 c++
- 关于using声明与using指令 c++
- using声明与using指令
- C++_命名空间namespace 与 using编译指令 与 using声明使用。
- using声明和using编译指令
- using声明 和 using编译指令 比较
- using声明和using编译指令
- using 声明和using编译
- using声明和using编译
- using指令和using声明的区别
- 立此存照(18)[C++]using声明与using指示的区别
- C#using别名指令
- 关于using声明和using指示符
- C++using声明和using指示
- Using声明和指令的工作原理
- Using声明和指令的工作原理
- Using声明和指令的工作原理
- using声明
- iOS中performSelector+@selector多参数传递解决方法
- iOS cell上的定时器
- 你不知道的TextView实现原理
- PHPExcel用法
- php file_get_contents 服务器端返回false解决方法
- 关于using声明与using编译指令 c++
- 将两个字符转化成一个十六进制数
- 自定义GridView,实现item之间相互滑动
- 数组实现链表及插入
- 万恶的db2总结
- undo空间管理(可以收缩undo log回滚日志物理文件空间)
- 关于C++程序的编码问题
- ava was started but returned exit code = 13
- hascode、equals()、==的区别与联系?