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