在C++中使用声明

Using declaration in C++

本文关键字:声明 C++      更新时间:2023-10-16
namespace A {
  void F() {}
  namespace B {
    void F(int) {}  
  }
}
using A::B::F;
namespace A {
  void G() {
    F();   // OK
    F(1);  // Error: too many arguments to function void A::F()
  }
}
int main() { return 0; }

我有这段代码。

我定义了两个名称相同但签名不同的函数。

然后我使用使用声明using A::B::F

A::G()编译器尝试在A::B::F()之前解析A::F()

如果有这样的冲突,是否有任何订单?

首先搜索最深的嵌套作用域,如果未找到名称,则向外搜索作用域。所以首先它会在G中找到一个F的块范围声明,如果有的话;然后它会在命名空间范围找到一个声明 A ,如果有的话;如果这也失败了,它将搜索全局范围。由于using A::B::F;出现在全局范围内,因此始终首先找到A::F。也许您应该将using声明移到A内。

这绝对是关于放置的。

namespace A {
  void G() {

    F();   // OK, A::F
    using B::F;
    F(1);  // OK, A::B::F
  }
}