Bel*_*loc 18 c++ using-declaration language-lawyer c++14
在[namespace.udecl]/10中,您有以下示例:
namespace A {
int i;
}
namespace A1 {
using A::i;
using A::i; // OK: double declaration
}
void f() {
using A::i;
using A::i; // error: double declaration
}
Run Code Online (Sandbox Code Playgroud)
这个片段编译成clang.
第一个是命名空间内的声明,多个using语句可能经常使用#includes发生.第二个是函数的定义,除非你犯了错误,否则你永远不会这样做.例如,您不能两次定义相同的符号,但您可以多次声明.
using语句也不仅仅是一个声明.它有点强大,因为它将函数从一个名称空间导入另一个名称空间.例如,它可以将受保护的基类成员函数拉入派生类,使其公开.这几乎是通过联系的定义.