我正在尝试在最新的 Visual Studio 和 Clang 版本中测试我的项目。弹出的错误之一与不明确的运算符有关(with reversed parameter order)
。这似乎没有在 C++17 中弹出。
例如:(https://godbolt.org/z/Gazbbo)
struct A {
bool operator==(const A& other) const { return false; }
};
struct B : private A {
B(const A&);
bool operator==(const B& other) const { return false; }
};
bool check(A a, B b) {
return b == a;
}
我不确定为什么这会是一个问题。在我看来,这里唯一可行的功能是bool operator==(const B& other) const
asA
可以隐式转换为B
但不能反过来。事实上,如果我用标记代替B(const A&)
,explicit
我会得到一个B
无法转换为A
.
我试图了解我可以做些什么来避免这种情况,除了使用explicit
或使用B(a)
. 想象一下A
,B
如果是库代码,我如何在不破坏低版本界面的情况下支持 C++20?