typedef std::string string;名空间,头文件的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:25:37
typedef std::string string;
是什么意思?

“头文件中不应该开放std或者其他的常用名字空间,以防污染 ”
这句话能否详细解释一下?

std::string表示包含在std命名空间中的string类,上面那句话为了编程方便,可以在程序中用string代替std::string,这样做是为了不写using namespace std;,在大型程序中,往往会用到许多变量名,经常和std中定义的一些名称冲突,导致许多名字不能被用户定义或者与其他的一些代码冲突,这就是所谓的“污染”

把 std::string重新取一个名字叫string

当之后每次用到string的时候就相当于std::string

这个功能有点类似与using namespace std;

但typedef写法兼容vc6

你可以把#include 简单理解为把一个文件粘贴到这个地方. 如果你在头文件使用using namespace XXX; 那这个XXX将会在所有包含( #include )的地方有效.

举个例子:

a.h 里有 using namespace ns_myname;
b.cpp里有 #include "a.h"

那在b.cpp里变的也能直接使用ns_myname名字空间下的内容了. 但有时你并不想这么做. 在一个大工程里这么做将会时整个程序代码变得非常混乱. 而且难以发现错误.
所以一般都把using namespace XXX放到cpp(实现)文件里.

另外, 个人觉得用using std::string;会比typedef std::string string;更加直观一点...