- 此问题在此处已有答案**:
11年前关闭了。
- 可能重复:**
Why is 'using namespace std;' considered a bad practice in C++?
Using std Namespace
我在很多不同的论坛上徘徊,我似乎看到这个问题一次又一次地出现。这是一个非常初学者的问题。
我通常用以下语句定义程序:
#include<string>
using namespace std;
string x;
我看到很多代码示例将字符串定义为
std::string
这样做的目的是什么?它是好的实践还是有一些功能?
5条答案
按热度按时间2skhul331#
正如前面提到的另一个答案,除非导入整个
std
名称空间或std::string
(见下文),否则必须使用std::
。在我看来,使用
std::string
而不是string
更好,因为它明确地表明它是std::string
,而不是其他字符串实现。但是,如果您更喜欢只编写
string
,我建议您使用using std::string;
而不是using namespace std;
,以便只将实际需要的内容导入到全局名称空间中。jxct1oxe2#
string
的全名是std::string
,因为它驻留在namespace std
中,所有C++标准库函数、类和对象都驻留在这个名称空间中。在代码中,我们显式地添加了
using namespace std;
行,这样就可以使用标准名称空间中的任何内容,而无需使用std::
前缀,这样就可以使用简写string
来引用std::string
(字符串类型的真实的名称),因为编译器知道要在namespace std
中查找它。string
和std::string
在功能上没有区别,因为它们是相同的类型。(或者使用任何名称空间,就这一点而言),因为这会导致包含该头文件的文件中的名称变得不明确。在此设置中,您只需在头文件中使用#include <string>
,然后使用std::string
来引用字符串类型。如果在std::string
和某个其它string
类型之间存在任何歧义,则使用名称std::string
将消除歧义。是否包含
using namespace std;
行是一个有争议的主题,许多程序员强烈支持或强烈反对它。我建议使用任何你觉得舒服的代码,并确保采用任何在大型项目中使用的编码约定。mzsu5hc03#
正如ssteinberg所说,它们是相同的,但只是语法上相同。
根据我的经验,使用全名更有用
任何需要的地方,或者添加一个显式
在源文件的开头。
这样做的好处是,源文件的依赖关系更加明显。如果您添加
这意味着您的代码可能依赖于该名称空间中的任何内容。
ddrv8njm4#
如果它们不是
using
,则必须使用std::string
指定名称空间字符串属于哪个名称空间字符串31moq8wy5#
如果代码前面有
using namespace std;
,则情况相同。