4

为什么我需要输入using namespace std;才能使用coutand endl?还有这些叫什么;是cout一个函数?

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

4

5 回答 5

13

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

如果您不采取任何措施将它们的名称导入全局命名空间,您将无法使用不合格的标识符coutendl. 您必须使用完全限定名称:

std::cout << "Hello, World!" << std::endl;

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

using namespace std;
cout << "Hello, Wordl!" << endl;

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

如果您确实需要使用它(例如,如果您的函数正在使用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...
}

更好的是,只要这是可行的,就是使用以下侵入性较小的using declarations,它将有选择地仅导入您指定的名称:

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

cout << "Hello, Wordl!" << endl;
于 2013-03-11T19:33:05.583 回答
4

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

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

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

于 2013-03-11T19:29:57.897 回答
2
using namespace std;

将名称集合(称为命名空间)中的名称带入当前范围。大多数教科书似乎鼓励如下使用:

#include <iostream>
using namespace std;

int main()
{
     //Code which uses cout, cin, cerr, endl etc.
}

有些人不鼓励以这种方式使用它,因为当命名空间范围重叠时,您可能会与名称发生意外冲突,并且会鼓励您直接使用标准名称,如 std::endl

您还有其他选择,例如

a) 利用范围规则临时引入命名空间

int main()
{
     {
        using namespace std;
        //Code which uses things from std
     }
     //Code which might collide with the std namespace
}

b) 或者只带你需要的东西

using std::endl;
using std::cin;

回答您的最后一个问题 cin 是一个流对象(支持流提取和插入运算符 >> 和 << 的函数和数据的集合)

于 2013-03-11T19:49:30.960 回答
0

cout 和 endl 是 C++ 标准库的成员。如果你想在没有 using 语句的情况下使用它们,只需在命名空间前面添加:

std::cout
std::endl

这可能对您有用:

http://msdn.microsoft.com/en-us/library/bzbx67e8(VS.80).aspx

cout在 C 中不存在。

于 2013-03-11T19:33:26.850 回答
0

通常,“使用命名空间标准”仅在小型学习项目中声明,从不在实际程序中声明。原因是您不需要将该名称空间中的所有内容包含到您的代码中,首先因为编译器需要时间来执行此操作。Stroustrup 自己写道,这是一种糟糕的品味。而且它比 C 中的 printf 更好,因为它是类型安全的,并且可以轻松地为您自己的类型重载,而无需更改库类。

于 2013-03-11T19:42:45.907 回答