using namespace std 和 include 的区别

using namespace std;
int main()
{
 std::string dd = "ddd";//会报错namespace "std" has no member "string",因为没有引入string库
}


#include<string>
int main()
{
    string  dd = "ddd"; //虽然编译单元包含了string,但是这个string还是找不到,因为string在std中,必须加std::才能找到string
    std::string dd = "ddd";//这样就不会报错了
}

#include<string>
using namespace std;//在这个域中用using声明了std::string
int main()
{
    string  dd = "ddd"; //string能找到了,这个string就是std::string
}


#include<iostream>
int main()
{
    std::string  dd = "ddd"; //不会报错,因为iostream里面include了string
}



总结:
#include <string>

就是将string库包含到当前编译单元中.

using namespace std;

1.尽量不要写using namespace std;因为随着项目的增大,会污染其他的文件,很难查出问题

因为使用using namespace std;的话就没有起到命名空间的作用。再次回到了如同没有涉及命名空间时,所有标示符都定义在全局作用于中的混乱情况,不利于程序员创建新对象。


2.如果,把using namespace std; 写在全局中.

就是将std里的所有名字暴露在当前编译单元的各个域中,

3.如果using std::string在单独的域中,就可以在该域中直接使用string, 少打std::了,比较方便
一个编译单元会有很多域...一般,这个只会出现在单独的域中
原文地址:https://www.cnblogs.com/kevinWu7/p/10163533.html