“using namespace std;”和“std::cout”可以一起使用吗?

can "using namespace std;" and "std::cout" be used together?

提问人:kev 提问时间:12/6/2021 最后编辑:Vlad from Moscowkev 更新时间:12/6/2021 访问量:600

问:

一起使用时不会发生错误。这两者可以一起使用吗?using namespace std;std::cout

#include <iostream>
using namespace std;

int main() {
    
    std::cout << "Hello world!";

    return 0;
}
C++ 标准 名称查找 using 指令

评论

2赞 Sam Varshavchik 12/6/2021
是的,你可以,但你为什么要这样做?
0赞 Alan Birtles 12/6/2021
为什么你认为它们不能一起使用?
7赞 Retired Ninja 12/6/2021
更好的是,可以在没有哪个是首选方法的情况下使用。std::coutusing namespace std;
0赞 kev 12/6/2021
@AlanBirtles因为它们的意思是一样的。
0赞 Eljay 12/6/2021
它们可以一起使用,因为它们的含义相同。

答:

5赞 Vlad from Moscow 12/6/2021 #1

没有问题。在此声明中

std::cout << "Hello world!";

在命名空间中使用了名称的限定名称查找。coutstd

你也可以写

cout << "Hello world!";

在这种情况下,将使用非限定名称查找,并且由于指令将找到该名称cout

using namespace std;

您还可以包含 using 声明,例如

using std::cout;

请注意,应避免使用 using 指令。这可能是模棱两可的原因。最好使用限定名称。

评论

0赞 Vlad from Moscow 12/6/2021
@Eljay using namespace 是一个 using 指令。所以你的评论不清楚。
1赞 heap underrun 12/6/2021
@Eljay 我认为 Vlad 关于您的评论不清楚的评论是由于您似乎混淆了 using 关键字的不同用法的术语:正如 Cpppreference 上的命名空间文章中所解释的那样,一个称为 using-directive(参见 #5,à la),另一个称为 using-declaration(参见 #6,à la)。因此,正如 Vlad 在他的回答中所说,我们应该避免使用 using 指令,而更喜欢使用 using-declaration。using namespace std;using std::cout;
0赞 Eljay 12/6/2021
@heapunderrun • 谢谢,这解释了!
0赞 Barmak Shemirani 12/6/2021 #2

目的是防止碰撞。当您键入时,它会关闭该保护。这使您可以使用 , , ...没有解析,但它们可能会与其他命名空间发生冲突。namespaceusing namespace std;coutstringvectorstd::

在一些教程中,您可能会看到:他们把它放在那里,使示例更短,而不必在任何地方输入。但这种用法仅限于简短的示例。对于实际代码,建议不要添加using namespace std;std::using namespace std;

您可以随时使用 、 等,而不必担心冲突。std::coutstd::stringstd::vector