Rya*_*yan 2 c++ namespaces header std visual-c++
我正在学校上课,我想开始在课堂上做一些c ++编程.我的学校使用Microsoft Visual C++ 6.0(从1998年开始),所以它仍然使用<iostream.h>而不是<iostream>和using namespace std.当我开始工作时,我无法弄清楚如何以及何时使用using namespace std以及何时只使用std::cout<<"Hello World!"<<'\n';(例如)以及它的限制和命名空间关键字的其他用途.特别是,如果我想用iostream和iomanip创建一个程序,我是否必须两次声明"使用命名空间std",或者是否有一些我必须使用的东西,或者我可以做同样的事情我和iostream一起做过吗?我试过谷歌搜索它,但我真的不明白.在此先感谢您的帮助.
riw*_*alk 11
好的,那里的一些东西,但它是可管理的.
首先,区别:
using namespace std;
...
cout << "Something" << endl;
Run Code Online (Sandbox Code Playgroud)
并使用
std::cout << "Something" << std::endl;
Run Code Online (Sandbox Code Playgroud)
只是范围问题.范围只是说明编译器如何识别变量和函数名称等的一种奇特方式.命名空间只是在该命名空间中的所有变量上添加一个额外的范围层.键入时using namespace std,您将占用命名空间内的所有内容std并将其移至全局范围,以便您可以使用较短的cout而不是更完全限定的std::cout.
关于名称空间的一个理解是它们跨文件.无论<iostream>和<iomanip>使用的命名空间std.因此,如果同时包含两者,则声明using namespace std将对两个文件进行操作,并且两个文件中的所有符号都将移动到程序的全局范围(或函数的作用域,如果在函数内使用它).
会有人告诉你"不要使用using namespace std!!!!",但他们很少告诉你原因.让我们说我有以下程序,我想要做的就是定义两个整数并打印出来:
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int cout = 0;
int endl = 1;
cout << cout << endl << endl; // The compiler WILL freak out at this :)
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用时using namespace std,我正在为命名碰撞打开大门.如果我(通过随机机会),将变量命名为与标题中定义的变量相同,那么您的程序将会中断,并且您将很难找出原因.
我可以通过不使用语句编写与以前相同的程序(但让它工作)using namespace std:
#include <iostream>
int main(int argc, char** argv) {
int cout = 0;
int endl = 1;
std::cout << cout << endl << std::endl; // Compiler is happy, so I'm happy :)
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望这澄清了一些事情.