关于using声明与using指令 c++

来源:互联网 发布:西门子plc怎么编程 编辑:程序博客网 时间:2024/05/17 08:14
书中提到using声明与using指令。

using std::cin; 这就是一个using声明,就像一个普通的声明。以后提到cin时就指的是std里面的。

using namespace std;这就是一个using指令,导入所有std里面的应用。

除此之外,还需注意:(以下引自http://topic.csdn.net/u/20090416/22/9b01fda8-49a5-4ac4-bc88-28f990b4212a.html)

 

“一般来说,使用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指令导入整个命名空间中的所有成员的名称,包括那些可能根本用不到的名称,如果其中有名称与局部名称发生冲突,则编译器并不会发出任何警告信息,而只是用局部名去自动覆盖命名空间中的同名成员。”


0 0
原创粉丝点击