std::字符串与c++中的字符串[重复]

aiazj4mn  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(191)
    • 此问题在此处已有答案**:

11年前关闭了。

    • 可能重复:**

Why is 'using namespace std;' considered a bad practice in C++?
Using std Namespace
我在很多不同的论坛上徘徊,我似乎看到这个问题一次又一次地出现。这是一个非常初学者的问题。
我通常用以下语句定义程序:

#include<string>
using namespace std;

string x;

我看到很多代码示例将字符串定义为

std::string

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

2skhul33

2skhul331#

正如前面提到的另一个答案,除非导入整个std名称空间或std::string(见下文),否则必须使用std::
在我看来,使用std::string而不是string更好,因为它明确地表明它是std::string,而不是其他字符串实现。
但是,如果您更喜欢只编写string,我建议您使用using std::string;而不是using namespace std;,以便只将实际需要的内容导入到全局名称空间中。

jxct1oxe

jxct1oxe2#

string的全名是std::string,因为它驻留在namespace std中,所有C++标准库函数、类和对象都驻留在这个名称空间中。
在代码中,我们显式地添加了using namespace std;行,这样就可以使用标准名称空间中的任何内容,而无需使用std::前缀,这样就可以使用简写string来引用std::string(字符串类型的真实的名称),因为编译器知道要在namespace std中查找它。
stringstd::string在功能上没有区别,因为它们是相同的类型。(或者使用任何名称空间,就这一点而言),因为这会导致包含该头文件的文件中的名称变得不明确。在此设置中,您只需在头文件中使用#include <string>,然后使用std::string来引用字符串类型。如果在std::string和某个其它string类型之间存在任何歧义,则使用名称std::string将消除歧义。
是否包含using namespace std;行是一个有争议的主题,许多程序员强烈支持或强烈反对它。我建议使用任何你觉得舒服的代码,并确保采用任何在大型项目中使用的编码约定。

mzsu5hc0

mzsu5hc03#

正如ssteinberg所说,它们是相同的,但只是语法上相同。
根据我的经验,使用全名更有用

std::string

任何需要的地方,或者添加一个显式

using std::string;

在源文件的开头。
这样做的好处是,源文件的依赖关系更加明显。如果您添加

using namespace std;

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

ddrv8njm

ddrv8njm4#

如果它们不是using,则必须使用std::string指定名称空间字符串属于哪个名称空间字符串

31moq8wy

31moq8wy5#

如果代码前面有using namespace std;,则情况相同。

相关问题