cd中的std :: string vs string

时间:2011-03-31 11:37:16

标签: c++ string std

  

可能重复:
  Why is 'using namespace std;' considered a bad practice in C++?
  Using std Namespace

我一直在一堆不同的论坛上徘徊,我似乎每次都会看到这种情况。这是一个非常初学的问题。

我通常使用

定义一个程序
#include<string>
using namespace std;

string x;

我看到一堆代码示例将字符串定义为

std::string.

这是为了什么目的?是好的做法还是有一些功能?

5 个答案:

答案 0 :(得分:43)

正如另一个答案所述,除非您导入整个std::命名空间或std(见下文),否则必须使用std::string

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

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

答案 1 :(得分:13)

string的全名是std::string,因为它位于namespace std,即所有C ++标准库函数,类和对象所在的命名空间。

在您的代码中,您已明确添加了行using namespace std;,它允许您使用标准命名空间中的任何内容而不使用std::前缀。因此,您可以使用简写std::string来引用string(字符串类型的真实姓名),因为编译器知道要查找namespace std

stringstd::string之间没有任何功能差异,因为它们属于同一类型。也就是说,有时您希望std::string超过string。例如,在头文件中,放置行using namespace std;(或使用任何命名空间)通常不被认为是一个好主意,因为它可能导致包含该头的文件中的名称变得模糊不清。在此设置中,您只需在标头中#include <string>,然后使用std::string来引用字符串类型。同样,如果std::string与其他string类型之间存在任何歧义,则使用名称std::string可消除歧义。

你是否包含行using namespace std;是一个有点争议的话题,许多程序员强烈反对或强烈反对它。我建议您使用您认为合适的任何内容,并确保采用在处理大型项目时使用的任何编码约定。

答案 2 :(得分:4)

正如ssteinberg所说的那样。但只是语法上的。

根据我的经验,使用全名

更有用
std::string 

您需要的地方,或添加明确的

using std::string;

在源文件的开头。

优点是,通过这种方式,源文件的依赖性更加可观察。如果添加

using namespace std;

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

答案 3 :(得分:1)

如果它们不是using namespace std,那么他们必须使用std::string

指定属于哪个命名空间字符串

答案 4 :(得分:-1)

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