我尝试过,它没有问题,但在这种情况下,std没有定义。
using namespace std;
int main()
{
....
}
答案 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 std
和using namespace othername
表示不同的指令的任何不同内容。如果您的编译器以不同方式处理它们(识别名称空间std
而不识别其他名称空格,即使没有其他声明),那么这对您的编译器也是特定的。
答案 2 :(得分:-2)
尝试并执行std :: cout,它将无法正常工作。
using namespace std
只定义命名空间
#include {x}
'包含'命名空间中的代码
即,std::cout
需要#include <iostream>
。非常简单的解释,但它是正在发生的事情。