c++中命名空间的using声明

来源:百度知道 编辑:UC知道 时间:2024/07/05 22:14:05
在c++中"using namespace::name;"与"using namespace std;"是否具有相同的功能,例如:
#include<iostream>
#include<string>
/*using std::cin;
*using std::cout;
*using std::endl;
*using std::string;*/
using namespace std;
int main()
{
cout<<"Enter a character string:"<<endl;
string line;
while(getline(cin,line))
{
cout<<line<<endl;
cout<<"The size of "<<line<<" is "<<line.size()<<" characters,including the newline."<<endl;
}
return 0;
}
该程序中using namespace std;与注释部分互换后在运行中未发现任何异常与错误,请问两者是否具有完全相同的功能?
谢谢!

不一样。using std::cin的含义是using 命名空间::[命名空间::...::]标识符;这样这个标识符可以在后面直接使用,不需要带上命名空间完整引用。
using namespace std的含义是using namesapce [命名空间::...::]命名空间,必须是命名空间结束,意思是,把这个命名空间里的东西从此合并到当前命名空间,这样这个命名空间里的东西都可以直接使用了。
所以后者导入的标识符要更多,会导入很多不需要的标识符,适度使用。

不是完全相同
using namespace std可以引用到std名称空间里的所以定义的类。
而注释部分只是其中的4个而已,还有其他的并没有引用到。
但是对这个程序来说,已经足够了。

关于这方面的问题,请参考网易学院视频中心
http://tech.163.com/special/000915SN/stthzcplus.html
第二章第6-8节范磊老师做了专题讲解,详细分析了iostream.h和iostream头文件,以及名称空间的问题

很不错的问题啊!
现在国人一般喜欢用
#include <iostream>
using namespace std;
但是美国专家们早就已经给出了更好的建议:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
等等
因为这样不会把std全部打开可见,在超大型系统工程中这可以有效减小文件或变量重名问题,同时这也正合符C++数据和对象分离,封装隐藏和部分可见的观点,真正的高手、严格和高质量的程序一般都会采用第二种方法。