可能是重复问题:
为什么在C++中使用'using namespace std;'被认为是不好的做法?
使用std命名空间
我一直在各种论坛上徘徊,似乎每次都会看到这个问题。这是一个非常初学者的问题。
我通常这样定义程序:
#include<string>
using namespace std;
string x;
我看到很多代码示例将字符串定义为
std::string
这是什么目的?这是良好的实践还是具有某些功能?
可能是重复问题:
为什么在C++中使用'using namespace std;'被认为是不好的做法?
使用std命名空间
我一直在各种论坛上徘徊,似乎每次都会看到这个问题。这是一个非常初学者的问题。
我通常这样定义程序:
#include<string>
using namespace std;
string x;
我看到很多代码示例将字符串定义为
std::string
这是什么目的?这是良好的实践还是具有某些功能?
正如其他答案所述,使用 std::
是必要的,除非您导入整个 std
命名空间或 std::string
(请参见下文)。
在我看来,使用 std::string
要比使用 string
更好,因为它明确地表明它是一个 std::string
,而不是其他字符串实现。
如果您更喜欢只写 string
,那么我建议您使用 using std::string;
代替 using namespace std;
,以仅将您实际需要的东西导入到全局命名空间中。
using std::string;
之后,你可以直接写,例如 string s="foo";
。请注意,我的翻译尽可能保持原文意思不变,同时使语言更加通俗易懂。 - CodeLurkerstring
的全名是 std::string
,因为它位于 namespace std
中,这是所有 C++ 标准库函数、类和对象所在的命名空间。using namespace std;
,这允许你使用标准命名空间中的任何内容,而不需要使用 std::
前缀。因此,你可以使用简写的 string
来引用 std::string
(string 类型的真实名称),因为编译器知道要在 namespace std
中查找它。
string
和 std::string
之间没有功能差异,因为它们是相同类型。尽管如此,在某些情况下,你可能更喜欢使用 std::string
而不是 string
。例如,在头文件中,通常不建议放置 using namespace std;
这样的行(或者使用任何命名空间),因为这可能会导致包含该头文件的文件中的名称变得模糊不清。在这种情况下,你只需在头文件中包含 #include <string>
,然后使用 std::string
引用字符串类型。同样地,如果存在 std::string
和其他某些 string
类型之间的歧义,使用名称 std::string
将消除这种歧义。using namespace std;
的行在一定程度上是一个有争议的话题,许多程序员都强烈支持或反对它。建议使用你感到舒适的方式,并确保在大型项目中采用任何编码约定。string
的完整名称是 ::std::string
,但没有人使用它。 - Mooing Duck正如ssteinberg所说,从句法上看是一样的。
根据我的经验,更有用的做法是使用全名。
std::string
using std::string;
标签。
using namespace std;
如果他们没有使用
名称空间std
,那么他们必须通过使用std::string
来指定字符串属于哪个命名空间。
using namespace std;
,那么它就是一样的。