可能重复:
Why is 'using namespace std;' considered a bad practice in C++?
Using std Namespace
我一直在一堆不同的论坛上徘徊,我似乎每次都会看到这种情况。这是一个非常初学的问题。
我通常使用
定义一个程序#include<string>
using namespace std;
string x;
我看到一堆代码示例将字符串定义为
std::string.
这是为了什么目的?是好的做法还是有一些功能?
答案 0 :(得分:43)
正如另一个答案所述,除非您导入整个std::
命名空间或std
(见下文),否则必须使用std::string
。
在我看来,使用std::string
代替string
会更好,因为它明确表明它是std::string
而不是其他字符串实现。
如果您只想编写string
,我建议您使用using std::string;
而不是using namespace std;
来仅将内容导入到您实际需要的全局命名空间中。 / p>
答案 1 :(得分:13)
string
的全名是std::string
,因为它位于namespace std
,即所有C ++标准库函数,类和对象所在的命名空间。
在您的代码中,您已明确添加了行using namespace std;
,它允许您使用标准命名空间中的任何内容而不使用std::
前缀。因此,您可以使用简写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;
是一个有点争议的话题,许多程序员强烈反对或强烈反对它。我建议您使用您认为合适的任何内容,并确保采用在处理大型项目时使用的任何编码约定。
答案 2 :(得分:4)
正如ssteinberg所说的那样。但只是语法上的。
根据我的经验,使用全名
更有用std::string
您需要的地方,或添加明确的
using std::string;
在源文件的开头。
优点是,通过这种方式,源文件的依赖性更加可观察。如果添加
using namespace std;
这意味着您的代码可能依赖于该命名空间中的任何内容。
答案 3 :(得分:1)
如果它们不是using
namespace std
,那么他们必须使用std::string
答案 4 :(得分:-1)
如果您的代码前面有using namespace std;
,那么它就是相同的。