为什么我需要输入using namespace std;
才能使用cout
and endl
?还有这些叫什么;是cout
一个函数?
cout
C中有吗?我听说它是用 C++ 实现的,因为它在很多方面都更好。
cout
是在命名空间中定义的全局对象std
,并且endl
是也在命名空间中定义的(流操纵器)函数std
。
如果您不采取任何措施将它们的名称导入全局命名空间,您将无法使用不合格的标识符cout
和endl
. 您必须使用完全限定名称:
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;
不!你不需要using namespace std
,也不应该使用它。使用完全限定的名称std::cout
和std::endl
,或者,在小范围内,
using std::cout;
using std::endl;
至于其他问题,std::cout
不是函数。它是一种绑定到标准输出的全局输出流对象。std::cout
C中没有。
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 是一个流对象(支持流提取和插入运算符 >> 和 << 的函数和数据的集合)
cout 和 endl 是 C++ 标准库的成员。如果你想在没有 using 语句的情况下使用它们,只需在命名空间前面添加:
std::cout
std::endl
这可能对您有用:
http://msdn.microsoft.com/en-us/library/bzbx67e8(VS.80).aspx
cout
在 C 中不存在。
通常,“使用命名空间标准”仅在小型学习项目中声明,从不在实际程序中声明。原因是您不需要将该名称空间中的所有内容包含到您的代码中,首先因为编译器需要时间来执行此操作。Stroustrup 自己写道,这是一种糟糕的品味。而且它比 C 中的 printf 更好,因为它是类型安全的,并且可以轻松地为您自己的类型重载,而无需更改库类。