小编AFo*_*ley的帖子

不明确的重载、隐式转换和显式构造函数

考虑以下小程序:

#include <vector>

class A {
  int a;
  int b;

 public:
  explicit A() = default;
  A(int _a, int _b) : a(_a), b(_b) {}

  int f(const A& a) { return 0; }
  int f(std::vector<int> a) { return 1; }
};
int g(const A& a) { return 2; }
int g(std::vector<int> a) {  return 3; }

int main() {
  A a(1,2);
  //   a.f({}); //ambiguous according to gcc
  g({}); //ambiguous according to gcc
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 10.2 拒绝编译它:它说调用g({})a.f({})是模棱两可的。Clang …

c++ default-constructor language-lawyer implicit-conversion

11
推荐指数
1
解决办法
164
查看次数