为什么我需要输入using namespace std;
才能使用cout
和endl
?这些叫做什么呢? cout
是一个函数吗?
C中有cout
吗?我听说它是用C ++实现的,因为它在很多方面都更好。
答案 0 :(得分:9)
cout
是std
命名空间中定义的全局对象,endl
是std
命名空间中定义的(流操作符)函数。
如果您不采取任何措施将其名称导入全局命名空间,则无法使用非限定标识cout
和endl
来引用它们。您必须使用完全限定名称:
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 std
和you shouldn't use it。使用完全限定的名称std::cout
和std::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更好,因为它是类型安全的,可以轻松地为您自己的类型重载,而无需更改库类。