C++:对不存在的命名空间使用命名空间指令

C++: using namespace directive for non-existing namespace

本文关键字:命名空间 指令 不存在 C++      更新时间:2023-10-16

我正在尝试用g++(版本7.5.0(编译以下代码

using namespace nspace;
int main()
{
return 0;
}

它给出错误如下

$ g++ above_code.cpp 
namespaces_mystery1.cpp:1:17: error: ‘nspace’ is not a namespace-name
using namespace nspace;
^~~~~~
namespaces_mystery1.cpp:1:23: error: expected namespace-name before ‘;’ token
using namespace nspace;
^

以上行为正是我所期望的。

但当我试图编译下面的代码时,它编译得很好,没有像上面那样的错误。

using namespace std;
int main()
{
return 0;
}

为什么与名为nspace的命名空间相比,名为std的命名空间有这种不同的行为

命名空间nspace在遇到using namespace nspace;时不存在,而std命名空间存在。后者可能是真的,因为隐含或显式地包含了C++标准库的方面,或者编译器本身甚至可能对其进行硬编码

如果你写了

namespace nspace{}

using语句之前,则编译将成功。