"std::string"和"c++的string"的区别

30 浏览
0 Comments

"std::string"和"c++的string"的区别

这个问题已经有答案了

可能的重复问题:

为什么在C++中使用\'using namespace std;\'被认为是个不好的实践?

使用std命名空间

我一直在不同的论坛上转悠,每次都会看到这个问题。这是一个非常初学者的问题。

我通常这样定义程序:

#include
using namespace std;
string x;

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

std::string

这是什么目的呢?这是个好习惯还是有某些功能?

admin 更改状态以发布 2023年5月20日
0
0 Comments

string的完整名称是std::string,因为它驻留在namespace std中,这是所有C++标准库函数、类和对象所在的命名空间。

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

stringstd::string之间没有功能上的区别,因为它们是相同的类型。 话虽如此,有时您可能更喜欢std::string而不是string。 例如,在头文件中,通常不建议放置using namespace std;(或使用任何命名空间),因为它可能会导致包括该头文件的文件中的名称变得有歧义。 在这种设置中,您只需在头文件中#include ,然后使用std::string来引用字符串类型。 同样,如果std::string和其他一些string类型之间存在任何歧义,使用名称std::string将消除歧义。

是否完全包含using namespace std;是一个备受争议的话题,许多程序员强烈支持或强烈反对。 我建议使用您习惯的任何内容,并确保在处理大型项目时采用使用的任何编码约定。

0
0 Comments

正如其他答案所述,使用std::是必要的,除非您导入整个std命名空间或std::string(见下文)。

我认为使用std::string而不是string更好,因为它明确表明它是一个std::string而不是其他字符串实现。

如果您喜欢仅写string,我建议您使用using std::string;而不是using namespace std;仅导入您实际需要的内容到全局命名空间中。

0