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

为什么我需要输入using namespace std; 为了能够使用coutendl ? 这些叫做什么呢? 是一个function?

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

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

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

 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::coutstd::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更好,因为它是类型安全的,并且可以轻松地为您自己的类型重载,而无需更改库类。