using namespace std;

首先我们要知道,这句代码的意思是:打开标准命名空间,即告诉编辑器我们将要使用名字空间std中的函数或者对象。

using 顾名思义就是正在使用的意思。
namespace 的引用是为了解决不同space中命名相同导致命名冲突的问题。使用using namespace …的引用可以让编译器准确的找到我们需要的函数或者对象,能有效的提高程序员写代码的效率,但这些都和性能无关,仅仅对程序员有利。
std 是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用std::来限定。

只是在std 标准空间里,包含了原来的库和头文件。但是在C++ 中因为我们要使用的STL中有部分名称是没有加下划线的保留标记的,而这些名称如果再用在自己的源代码中 就会引发未定义的后果。

所以当我们在写成熟的代码的时候,一般不建议将标准命名空间全部打开,而是需要用库里的什么就打开什么。这就有效的防止了命名冲突

下面是std中常用的标准对象 cin>>标准输入,cout<<标准输出,endl 换行和函数string 字符串 在代码中的三种使用。

第一种使用:使用using namespace std; 完全打开std 命名空间 --不安全,超简单

需包含< iostream>头文件,再在include后面使用 using namespace std;
注意: 此时可以直接使用std中包含的所有函数和对象。

#include <iostream>
using namespace std;        
int main()
{
	string a;   //定义a为字符串
	cin >> a;  //标准输入a
	cout << a<<endl;   //标准输出a,并换行
	return 0;
}

在这里插入图片描述

第二种使用:提前打开需要使用的std 中对象/函数 --安全,推荐

需包含< iostream>头文件,再在include后面使用using std::(名称) 依次打开需要的对象。
注意: 使用提前打开的对象时可直接使用,使用未提前打开的对象时需先打开再使用。

#include <iostream>
using std::string;   //   提前打开需要的名字
using std::cout;                
using std::endl;  
using std::cin;  //没有打开会报错
int main()
{
	string a;
	cin >> a;
	cout << a<<endl;  //运行结果与上面相同
	return 0;
}

在这里插入图片描述

第三种使用:什么时候用什么时候打开std 中对象/函数 --安全,较复杂

需包含< iostream>头文件,每次在使用的地方都用 std::(名称) 打开需要的对象。
注意: 每次使用时都需要在当前位置再打开一次

#include <iostream>

int main()
{
	std::string a;
	std::cin >> a;
//	cin >> a;       //没有打开,会报错
	std::cout<<a<<std::endl;     //运行结果与上面相同
//  cout << a;   //第二次使用时,仍然需要再次打开,否则报错
   std::cout<<a;   //运行结果多一个hello,但没有换行
	return 0;
}

在这里插入图片描述
在这里插入图片描述

文件中尽量不使用using namespace …,头文件中禁止使用

我不建议在头文件中使用 using namespace xxx 语句,不仅是对std空间。
如果头文件a.h使用了该语句,那么所有与a.h有关系的文件都会默认使用该语句,也就是说引用a.h头文件的都被迫using了,所以引用头文件的越多就会越容易导致命名冲突。

那如果实在是懒的将需要使用std中的函数名一一列举,也是可以使用的,只要你编译没有问题就可以啦!!毕竟C++库中的类型名基本都是小写,多用心也是可以避免命名冲突的问题~~

博主目前的理解只能到这里啦,如果之后有更深的理解,我会更新的~
其他大佬若有其他意见,欢迎留言讨论。。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐