18

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

4

1 回答 1

7

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

using 语句也不仅仅是一个声明。它更强大一些,因为它将一个函数从一个命名空间导入到另一个命名空间。例如,它可以将受保护的基类成员函数拉入派生类,使其公开。这几乎是链接的定义。

于 2015-07-04T15:10:33.587 回答