using声明不能在函数作用域中重复.为什么

A using-declaration can not be repeated in function scope. Why is that?

本文关键字:为什么 作用域 函数 声明 不能 using      更新时间:2023-10-16

在[namespace.udcl]/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中编译。

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

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