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

时间:2013-03-11 19:28:50

标签: c++ c cout

为什么我需要输入using namespace std;才能使用coutendl?这些叫做什么呢? cout是一个函数吗?

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

5 个答案:

答案 0 :(得分:9)

coutstd命名空间中定义的全局对象,endlstd命名空间中定义的(流操作符)函数。

如果您不采取任何措施将其名称导入全局命名空间,则无法使用非限定标识coutendl来引用它们。您必须使用完全限定名称:

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

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

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

但是,请记住,在全局命名空间中有一个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...
}

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

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

cout << "Hello, Wordl!" << endl;

答案 1 :(得分:4)

不!您不需要using namespace stdyou shouldn't use it。使用完全限定的名称std::coutstd::endl,或者在小范围内使用

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

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

答案 2 :(得分: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是一个流对象(支持流提取和插入运算符的函数和数据集合&gt;&gt;和&lt;&lt;)

答案 3 :(得分:0)

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

std::cout
std::endl

这可能对您有用:

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

C中不存在

cout

答案 4 :(得分:0)

通常,“using namespace std”仅在小型学习项目中声明,从不在真实程序中声明。原因是您不需要将该命名空间中的所有内容都包含在代码中,首先是因为编译器需要时间来完成。 Stroustrup自己写道,这是不好的味道。 它比C中的printf更好,因为它是类型安全的,可以轻松地为您自己的类型重载,而无需更改库类。