C++中using namespace std 的具体含义

using namespace std的作用

我觉得在介绍using namespace std的作用之前,应该先讲一下如果没有using namespace std这句代码,会对你的代码以及编程效率会有什么影响。

删掉using namespace std的影响

最直观的一个影响就是,你的cin和cout就不能用的那么简洁明了了。
正常情况下,例如我要输出一个hello world!
C++代码是:

#include<iostream>
using namespace std;
int main(){
	cout<<"hello world!"<<endl;
	system("pause");
	return 0;
}

可是如果你删掉了using namespace std并且还想输出hello world!,你的代码要做出什么修改?
变成了:

#include<iostream>
int main(){
	std::cout<<"hello world!"<<std::endl;
	system("pause");
	return 0;
}

怎么样?最直观的感受就是,你的代码变长了。
那么这是为什么?
因为平常我们用的cin和cout还有endl都是定义在名为std的命名空间中的。当然std命名空间内所拥有的远不止这些。

std::cout意思为编译器应从操作符(::)左侧的名字所示的作用域中寻找到右侧那个名字,因此std::cout的意思是要使用命名空间std中的名字cout。

using namespace std最安全的写法

using namespace std简单一句代码,确实可以减轻我们在编写C++程序的负担,但是using namespace std并不是最安全的写法,如果你的程序比较简单,用using namespace std貌似没什么问题,可是当你的工程量太大,声明的变量太多,有可能会发生你声明的变量名与std命名空间内部的名字发生冲突的情况,从而产生BUG。

最安全的写法便是使用using 声明,有了using声明就无须专门的前缀(例如::)也能使用所需的名字。
using声明的形式:
using namespace :: name;(这个是通用格式,并不是具体代码)
只要声明了↑上述语句,就可以直接使用命名空间的名字。

还是以输出hello world!为例,用最安全的方法来写就是。

#include<iostream>
using std::cout;
using std::endl;

int main() {
	cout << "hello world!" << endl;
	system("pause");
	return 0;
}

上述代码使用了using std::cout;和using std::endl;两个using声明。
这样子我们后续使用cout和endl都不需要再次声明前缀了,因为我们没有写cin的using声明,所以我们代码中还可以将cin作为变量来使用,而不是作为一个输入流来看待。

总结

using namespace std;这个using声明是将std命名空间内的名字,全部暴露在外,只要访问std命名空间内的名字,我们都不需要写额外的前缀,唯一的缺点就是,存在自己所使用的变量名可能与std命名空间内的名称发生冲突。

最安全的写法就是需要使用到std命名空间内的什么名字,对其进行using声明,这样子就不存在会与std命名空间内的名称发生命名冲突了。

猜你喜欢

转载自blog.csdn.net/weixin_48029654/article/details/106288307