在[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
}
此代码段以clang编译。
答案 0 :(得分:7)
第一个是命名空间内的声明,使用#includes可以经常发生多个using语句。第二个是函数的定义,除非你犯了错误,否则你永远不会这样做。例如,您不能两次定义相同的符号,但您可以多次声明。
using语句不仅仅是一个声明。它有点强大,因为它将函数从一个名称空间导入另一个名称空间。例如,它可以将受保护的基类成员函数拉入派生类,使其公开。它几乎是通过联系的定义。