【问题标题】:std::string vs string in c++ [duplicate]c ++中的std :: string vs string [重复]
【发布时间】:2011-07-26 19:57:52
【问题描述】:

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

我一直在一堆不同的论坛上徘徊,我似乎一次又一次地看到这个弹出窗口。这是一个非常初学者的问题。

我通常用

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

string x;

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

std::string.

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

【问题讨论】:

标签: c++ string std


【解决方案1】:

正如另一个答案已经说明的那样,除非您导入整个 std 命名空间或 std::string(见下文),否则必须使用 std::

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

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

【讨论】:

  • 这里没有说的,其实就是回报,在声明using std::string;之后,你可以直接写,例如string s="foo";.
【解决方案2】:

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

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

std::string 

在你需要的地方,或者添加一个明确的

using std::string;

在源文件的开头。

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

using namespace std;

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

【讨论】:

    【解决方案3】:

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

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

    stringstd::string 在功能上没有区别,因为它们是同一类型。也就是说,有时您更喜欢std::string 而不是string。例如,在头文件中,放置using namespace std; 行(或使用任何命名空间,就此而言)通常不是一个好主意,因为它可能导致包含该头文件的文件中的名称变得模棱两可。在此设置中,您只需在标题中使用#include &lt;string&gt;,然后使用std::string 来引用字符串类型。同样,如果 std::string 和其他一些 string 类型之间存在任何歧义,使用名称 std::string 将消除歧义。

    是否包含using namespace std; 这行是一个颇有争议的话题,许多程序员强烈支持或强烈反对它。我建议使用任何你觉得舒服的东西,并确保在处理大型项目时采用任何编码约定。

    【讨论】:

    • string的全称是::std::string,但是没人用。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      如果您的代码前有using namespace std;,则相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-19
        • 2011-09-24
        • 2013-02-11
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        相关资源
        最近更新 更多