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

时间:2015-07-04 14:54:00

标签: c++ language-lawyer c++14 using-declaration

在[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编译。

1 个答案:

答案 0 :(得分:7)

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

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