Chu*_*dad 6 c++ namespaces using-declaration language-lawyer unnamed-namespace
SO最近的一个帖子触发了这一点。
未命名的命名空间被认为等同于
namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespace-body }
Run Code Online (Sandbox Code Playgroud)
我记不起它不等于的确切原因
namespace unique { namespace-body }
using namespace unique;
Run Code Online (Sandbox Code Playgroud)
也尝试过搜索(包括谷歌)但没有成功。请分享您在这方面掌握的任何信息。
现在存在的规范于 1995 年在N0783中引入,以纠正极端情况。引用该论文(第 9 页):
WP 将未命名命名空间的语义定义为等效于:
Run Code Online (Sandbox Code Playgroud)namespace UNIQUE { // namespace body } using namespace UNIQUE;这是不正确的,因为它使得未命名命名空间中的代码取决于代码是位于原始命名空间还是命名空间扩展中。
Run Code Online (Sandbox Code Playgroud)namespace {} // If you remove this line, the // use of ::f below is invalid namespace { void f() { using ::f; } }WP 应该更改为定义一个未命名的命名空间,相当于:
Run Code Online (Sandbox Code Playgroud)namespace UNIQUE {} using namespace UNIQUE; namespace UNIQUE { // namespace body }