【C++】 为什么建议代码尽量不要使用 using namespace std
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++库中的类型名基本都是小写,多用心也是可以避免命名冲突的问题~~
博主目前的理解只能到这里啦,如果之后有更深的理解,我会更新的~
其他大佬若有其他意见,欢迎留言讨论。。
更多推荐
所有评论(0)