C++: Questions about using namespace std and cout
为什么我需要输入
C中有
如果不采取任何措施将其名称导入全局命名空间,则无法使用不合格的标识符
1 | std::cout <<"Hello, World!" << std::endl; |
基本上,
1 2 | using namespace std; cout <<"Hello, Wordl!" << endl; |
但是,请记住,在全局命名空间中使用这样的
如果您确实需要使用它(例如,如果您的函数使用了
1 2 3 4 5 6 7 | 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... } |
更好的方法是,只要这是可行的,就使用以下入侵性较小的声明,这些声明将只选择性地导入您指定的名称:
1 2 3 4 | using std::cout; using std::endl; cout <<"Hello, Wordl!" << endl; |
不!你不需要
1 2 | using std::cout; using std::endl; |
至于其他问题,
1 | using namespace std; |
将名称集合(称为命名空间)中的名称引入当前作用域。大多数教科书似乎鼓励如下使用:
1 2 3 4 5 6 7 | #include <iostream> using namespace std; int main() { //Code which uses cout, cin, cerr, endl etc. } |
有些人不鼓励以这种方式使用它,因为当命名空间范围重叠时,可能会与名称发生意外冲突,并鼓励您直接使用std::endl等完全限定的名称。
你还有其他选择,比如
a)利用作用域规则临时引入命名空间
1 2 3 4 5 6 7 8 | int main() { { using namespace std; //Code which uses things from std } //Code which might collide with the std namespace } |
b)或者只带上你需要的东西
1 2 | using std::endl; using std::cin; |
在回答上一个问题时,cin是一个流对象(支持流提取和插入操作符的函数和数据的集合)>>和<<)
通常,"使用名称空间std"只在小型学习项目中声明,而不是在真正的程序中声明。原因是,您不需要将该名称空间中的所有内容都包含到代码中,首先是因为编译器需要时间来完成这项工作。斯特劳斯特鲁普自己写道,这是一种不好的品味。而且它比C中的printf更好,因为它是类型安全的,并且可以很容易地为您自己的类型重载,而无需更改库类。
CUT和Endl是C++中标准库的成员。如果要在不使用using语句的情况下使用它们,只需在命名空间前面加上:
这可能对您有用:
http://msdn.microsoft.com/en-us/library/bzbx67e8(vs.80).aspx
c中不存在