tem*_*def 10 c++ using-directives language-lawyer
我最近看到这个代码在C++项目的源文件中使用:
using namespace std;
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
忽略所有关于是否一个好主意的问题,using namespace std上述代码是否合法?在这两行之前,文件中没有代码.
我原本以为这不会编译,因为namespace std在#include <iostream>指令将其包含到文件中之前尚未在范围中声明,但是使用项目的构建系统,这编译得很好.如果某人有指向规范相关部分的链接,那将非常感激.
一个可能有趣的数据点.当我编译以下内容时:
using namespace std;
using namespace no_such_namespace;
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
那时既std没有no_such_namespace被定义为命名空间,也没有被定义为命名空间,但g ++只抱怨第二个.在没有声明的情况下,我认为标识符std没有什么特别之处.我认为@James Kanze是正确的,这是g ++中的一个错误.
编辑:据报道.(5年前!)
更新:现在已超过8年,仍未分配给任何人,更不用说固定了.g ++ 4.9.2表明了这个问题.clang ++ 3.5没有,但它会发出警告std并发出致命错误no_such_namespace:
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6853 次 |
| 最近记录: |