cd中的std :: string vs string

std::string vs string in c++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
Why is 'using namespace std;' considered a bad practice in C++?
Using std Namespace

我一直在一堆不同的论坛上徘徊,我似乎每次都能看到这个弹出窗口。这是一个非常初级的问题。

我通常用

1
2
3
4
#include<string>
using namespace std;

string x;

我看到外面有一堆代码示例,它们将字符串定义为

1
std::string.

这样做的目的是什么?这是一个好的实践还是有一些功能?


正如前面提到的另一个答案,除非导入整个std命名空间或std::string(见下文),否则使用std::是必要的。

在我看来,使用std::string而不是string更好,因为它明确地表明它是std::string,而不是其他一些字符串实现。

不过,如果您只想写string,我建议您使用using std::string;,而不是using namespace std;,只将实际需要的内容导入全局命名空间。


string的全称是std::string,因为它位于EDCOX1(11)中,所有C++标准库函数、类和对象所在的命名空间。

在代码中,您显式地添加了行using namespace std;,它允许您使用标准名称空间中的任何内容,而不使用std::前缀。因此,由于编译器知道要在namespace std中查找它,所以可以使用缩写string来引用EDOCX1(字符串类型的实名)。

stringstd::string之间没有功能差异,因为它们是相同的类型。也就是说,有时你会喜欢std::string而不是string。例如,在头文件中,通常认为将行using namespace std;放在(或使用任何名称空间)不是一个好主意,因为这样会导致包含该头文件的文件中的名称变得不明确。在这个设置中,您只需在头文件中输入#include ,然后使用std::string引用字符串类型。同样,如果std::string和其他string类型之间存在任何歧义,使用std::string的名称可以消除歧义。

不管您是否包括using namespace std;行,这是一个有争议的话题,许多程序员都强烈赞成或强烈反对它。我建议您使用任何您喜欢的,并确保在处理大型项目时采用任何编码约定。


正如ssteinberg所说的那样。但只在句法上。

根据我的经验,使用全名更有用

1
std::string

无论您在哪里需要它,或添加一个显式

1
using std::string;

在源文件的开头。

这样做的好处是,源文件的依赖性更加明显。如果添加

1
using namespace std;

这意味着您的代码可能依赖于该命名空间中的任何内容。


如果它们不是usingnamespace std,那么它们必须使用std::string指定属于哪个命名空间字符串。


如果您的代码前面有using namespace std;,那么它是相同的。