cd中的std :: string vs string

OVE*_*ONE 49 c++ string std

可能重复:
为什么'using namespace std;' 在C++中被认为是一种不好的做法?
使用std命名空间

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

我通常定义一个程序

#include<string>
using namespace std;

string x;
Run Code Online (Sandbox Code Playgroud)

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

std::string.
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*ter 45

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

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

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

  • 这里没有说的,这实际上是回报,是在声明了 `using std::string;` 之后,你可以直接写,例如 `string s="foo";`。 (3认同)

tem*_*def 13

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

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

它们之间没有功能差异string,std::string因为它们是相同的类型.这就是说,有次在那里你宁愿std::stringstring.例如,在头文件中,放置行using namespace std;(或使用任何命名空间)通常不被认为是一个好主意,因为它可能导致包含该头的文件中的名称变得模糊.在此设置中,您将只#include <string>在标题中,然后用于std::string引用字符串类型.同样,如果在std::string其他string类型之间存在任何歧义,使用该名称std::string将消除歧义.

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

  • `string`的全名是`:: std :: string`,但是没有人使用它. (2认同)

Ass*_*bar 5

正如ssteinberg所说,这是一样的。但只是在语法上。

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

std::string 
Run Code Online (Sandbox Code Playgroud)

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

using std::string;
Run Code Online (Sandbox Code Playgroud)

在源文件的开头。

这样做的好处是,你的源文件的依赖关系更容易被观察到。如果你添加一个

using namespace std;
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

58866 次

最近记录:

14 年,10 月 前