C++中的std::string与string有什么区别?

68

我已经搜索过了,但没有找到那些问题。对不起大家。 - OVERTONE
5个回答

68

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

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

如果您更喜欢只写 string,那么我建议您使用 using std::string; 代替 using namespace std;,以仅将您实际需要的东西导入到全局命名空间中。


3
在这里未明说的实际回报是,在声明了using std::string;之后,你可以直接写,例如 string s="foo";。请注意,我的翻译尽可能保持原文意思不变,同时使语言更加通俗易懂。 - CodeLurker

22
string 的全名是 std::string,因为它位于 namespace std 中,这是所有 C++ 标准库函数、类和对象所在的命名空间。
在你的代码中,你明确添加了一行 using namespace std;,这允许你使用标准命名空间中的任何内容,而不需要使用 std:: 前缀。因此,你可以使用简写的 string 来引用 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
string 的完整名称是 ::std::string,但没有人使用它。 - Mooing Duck

6

正如ssteinberg所说,从句法上看是一样的。

根据我的经验,更有用的做法是使用全名。

std::string 

无论您在哪里需要它,或者添加一个明确的


using std::string;

在你的源文件开头加上这段代码。这样做的好处是你的源文件的依赖关系更加明显。如果你添加一个

标签,它会导致编译错误,因为缺少匹配的

标签。

using namespace std;

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

3

如果他们没有使用名称空间std,那么他们必须通过使用std::string来指定字符串属于哪个命名空间。


0
如果你在代码前面加上了 using namespace std;,那么它就是一样的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接