我最近在 C++ 项目的源文件中看到这段代码:
using namespace std;
#include <iostream>
忽略所有关于拥有 using namespace std
是否是个好主意的问题上面的代码是否合法?这两行之前的文件中没有代码。
我原以为这不会编译,因为 namespace std
直到 #include <iostream>
才在范围内声明指令将其包含到文件中,但是使用项目的构建系统编译就可以了。如果有人链接到规范的相关部分,将不胜感激。
最佳答案
一个可能很有趣的数据点。当我编译以下内容时:
using namespace std;
using namespace no_such_namespace;
使用 g++ 4.5.2,我得到:
c.cpp:2:17: error: ‘no_such_namespace’ is not a namespace-name
c.cpp:2:34: error: expected namespace-name before ‘;’ token
需要说明的是,这两行是我编译的整个源文件。
此时 std
和 no_such_namespace
都没有被定义为命名空间,但 g++ 只提示第二个。我认为在没有声明的情况下,标识符 std
没有任何特别之处。我认为@James Kanze 是正确的,这是 g++ 中的错误。
编辑:And it's been reported. (5 年前!)
更新:现在已经超过 8 年了,仍然没有分配给任何人,更不用说修复了。 g++ 4.9.2 出现了这个问题。 clang++ 3.5 没有,但它对 std
发出警告,对 no_such_namespace
发出 fatal error :
c.cpp:1:17: warning: using directive refers to implicitly-defined namespace 'std'
using namespace std;
^
c.cpp:2:17: error: expected namespace name
using namespace no_such_namespace;
^
1 warning and 1 error generated.
更新:截至 2021 年 9 月 24 日,错误报告仍处于打开状态,该错误存在于 g++ 11.2.0 中。 2021-07-24 发布的评论建议 g++ 应该对此发出警告。
关于c++ - using namespace std 的排序;包括?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6841130/