如下代码,在C++20情况下,所有编译器都报错
#include <iostream>
struct C { C() { std::cout << "Constructs C" << std::endl; } };
struct A {
A() { std::cout << "Constructs A" << std::endl; }
A(const C & c) { std::cout << "Constructs A from C" << std::endl; }
};
struct B {
B() { std::cout << "Constructs B" << std::endl; }
operator C () const { return C(); }
};
int main() {
B b;
A a = b;
// Okay in all compilers.
// A a(b);
return 0;
}
在C++11标准下,VS 2019 编译通过,VS2019自带的Clang10编译报错,MinGW下gcc 8.1报错。
【 在 xieyf 的大作中提到: 】
: 假设 B b;
: A和B不同类型, 那么
: cpp标准说 A a = b; 是一定走构造函数的吧, 如果a和b是不同类型, 会首先调用
: ...................
--
FROM 222.129.54.*