使用声明不能在功能范围内重复.这是为什么?

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.

Mar*_*ata 7

第一个是命名空间内的声明,多个using语句可能经常使用#includes发生.第二个是函数的定义,除非你犯了错误,否则你永远不会这样做.例如,您不能两次定义相同的符号,但您可以多次声明.

using语句也不仅仅是一个声明.它有点强大,因为它将函数从一个名称空间导入另一个名称空间.例如,它可以将受保护的基类成员函数拉入派生类,使其公开.这几乎是通过联系的定义.