C ++:关于使用命名空间std和cout的问题
为什么我需要输入using namespace std;
为了能够使用cout
和endl
? 这些叫做什么呢? 是一个function?
C中有cout
吗? 我听说它是用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
这样的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;
没有! 您不需要using namespace std
, 也不应该使用它 。 使用完全限定名称std::cout
和std::endl
,或者在小范围内使用
using std::cout; using std::endl;
至于其他问题, std::cout
不是一个函数。 它是一种绑定到标准输出的全局输出流对象。 在C中没有std::cout
。
using namespace std;
将名称集合(称为命名空间)中的名称引入当前范围。 大多数教科书似乎鼓励使用如下:
#include 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
中不存在cout
通常,“using namespace std”仅在小型学习项目中声明,从不在真实程序中声明。 原因是您不需要将该命名空间中的所有内容都包含在代码中,首先是因为编译器需要时间来完成。 Stroustrup自己写道,这是不好的味道。 并且它比C中的printf更好,因为它是类型安全的,并且可以轻松地为您自己的类型重载,而无需更改库类。