C++:关于使用命名空间std和cout的问题

Jus*_*ang 3 c c++ cout

为什么我需要输入using namespace std;为了能够使用coutendl?这些叫做什么呢?是cout一个功能?

coutC吗?我听说它是​​用C++实现的,因为它在很多方面都更好.

And*_*owl 10

coutstd命名空间中定义的全局对象,endl也是在std命名空间中定义的(流操纵器)函数.

如果不采取行动,以他们的名字导入到全局命名空间,你将无法引用它们与不合格的标识符coutendl.您必须使用完全限定名称:

std::cout << "Hello, World!" << std::endl;
Run Code Online (Sandbox Code Playgroud)

基本上,using namespace std将名称std空间中存在的实体的所有名称注入全局名称空间的做法是什么:

using namespace std;
cout << "Hello, Wordl!" << endl;
Run Code Online (Sandbox Code Playgroud)

但是,请记住,using在全局命名空间中有这样的指令是一种BAD编程实践,这几乎肯定会导致恶名称冲突.

如果您确实需要使用它(例如,如果您的函数使用std命名空间中定义的许多函数,并且编写std::使代码更难以阅读),则应将其范围限制为单个函数的本地范围:

void my_function_using_a_lot_of_stuff_from_std()
{
    using namespace std;
    cout << "Hello, Wordl!" << endl;

    // Other instructions using entities from the std namespace...
}
Run Code Online (Sandbox Code Playgroud)

更好的是,只要这是实用的,就是使用以下,使用声明的侵入性更小,它将有选择地仅导入您指定的名称:

using std::cout;
using std::endl;

cout << "Hello, Wordl!" << endl;
Run Code Online (Sandbox Code Playgroud)


jua*_*nza 5

没有!你并不需要using namespace std,而你不应该使用它。使用完全限定的名称std::coutstd::endl,或者在较小范围内使用

using std::cout;
using std::endl;
Run Code Online (Sandbox Code Playgroud)

至于其他问题,std::cout不是功能。它是绑定到标准输出的一种全局输出流对象。而且std::coutC中没有。

  • @BujancaMihai,因为您可能不知道`std ::`下的所有名称,即使您知道,也无法知道将来在C ++标准库版本中出现的名称。 (2认同)