c++ - 使用命名空间标准

标签 c++ visual-c++ header namespaces std

我正在学校上编程课,我想在课外开始做一些 C++ 编程。我的学校使用 Microsoft Visual C++ 6.0(从 1998 年开始),所以它仍然使用 <iostream.h>而不是 <iostream>using namespace std .当我开始工作时,我不知道如何以及何时使用 using namespace std什么时候只使用像std::cout<<"Hello World!"<<'\n';这样的东西(例如)以及 namespace 关键字的限制和其他用途。特别是,如果我想用 iostream 和 iomanip 制作一个程序,我是否必须声明“使用命名空间标准”两次,或者是否有一些不同的东西我也必须使用,或者我可以做同样的事情我用iostream干过吗?我试着用谷歌搜索,但我真的什么都不懂。预先感谢您的帮助。

最佳答案

好的,那里有一些东西,但它是可以管理的。

首先,两者之间的区别:

using namespace std;
...
cout << "Something" << endl;

并使用

std::cout << "Something" << std::endl;

只是范围问题。作用域只是一种表达编译器如何识别变量和函数名称等的奇特方式。命名空间只不过是在该命名空间内的所有变量上添加一个额外的作用域层。当您键入 using namespace std ,您正在获取命名空间 std 内的所有内容并将其移动到全局范围,以便您可以使用较短的 cout而不是更完全合格的 std::cout .

关于 namespace 需要了解的一件事是它们跨越文件。两者 <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;
}

当我使用 using namespace std 时,我正在为命名冲突打开大门。如果我(偶然)将变量命名为与 header 中定义的相同的东西,那么您的程序就会中断,您将很难找出原因。

我可以通过不使用语句 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;
}

希望这已经澄清了一些事情。

关于c++ - 使用命名空间标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077566/

相关文章:

c++ - 为什么它不能正常工作,Numeric_limits

c++ - 相互递归类是否可能?

c++ - boost 图 : Test if two vertices are adjacent

c - 如何解决头文件之间的这种相互依赖关系?

css - easyui datagrid 标题边框样式

交换指针的 C++ 函数在作用域内工作

.net - Visual Studio 2010 Beta 2 中的目标 .NET 3.5 C++/CLI

c++ - Visual studio 6.0(VC++引用问题)

c++ - 如何获取进程相对时间

头文件中的 C++ 'using' 和 'using typename'