“using namespace std;”没有任何#include?

时间:2017-06-04 03:42:39

标签: c++

我尝试过,它没有问题,但在这种情况下,std没有定义。

    using namespace std;

    int main()
    {
       ....
    }

3 个答案:

答案 0 :(得分:7)

您的代码是非法的。指令using只能指定先前声明的命名空间,即可通过名称查找找到其名称的命名空间。

在这种情况下,您的编译器显然对名称std进行了特殊处理。它是特定于编译器的扩展,它将std视为隐式定义的命名空间。如果您在代码中尝试使用不同的命名空间名称,则很可能无法编译。

答案 1 :(得分:1)

所有using namespace std都告诉编译器,当代码中出现标识符(命名变量,类型等)时,要在std命名空间中查找与名称匹配的候选项。

main()函数中,根本没有使用任何标识符({}是一个空块)。所以没有必要找到匹配的候选者,并且在两种情况下编译的结果都是相同的。

如果向cout << "Hello\n"添加main()之类的语句,则using namespace std将导致编译器将名称空间cout中名为std的任何内容视为标识符cout的有效匹配。如果这是在#include <iostream>之后,那么std::cout被认为是可行的匹配。如果<iostream>中的声明对编译器不可见(在您的情况下,因为没有#include <iostream>),则编译器不能将std::cout视为cout的候选匹配,并将相应地发布诊断。

C ++标准没有指定有关std或使用需要using namespace stdusing namespace othername表示不同的指令的任何不同内容。如果您的编译器以不同方式处理它们(识别名称空间std而不识别其他名称空格,即使没有其他声明),那么这对您的编译器也是特定的。

答案 2 :(得分:-2)

尝试并执行std :: cout,它将无法正常工作。

using namespace std只定义命名空间

#include {x}'包含'命名空间中的代码

即,std::cout需要#include <iostream>。非常简单的解释,但它是正在发生的事情。