所以我有这个代码:
struct Foo {
Foo() { cout << "default\n"; }
Foo(const long long) { cout << "implicit\n"; }
};
struct Bar {
Bar(const short param) : param(param) {}
operator long long() const { return static_cast<long long>(param); }
const short param;
};
我原以为Foo foo = Bar(13)
会使用我的隐式强制转换,然后使用转换构造函数。但它错误:
错误:请求从
Bar
非标量类型转换Foo
不过,这很好用:Foo foo(Bar(13))
. 为什么我的隐式转换用于显式转换构造,而不用于隐式转换构造?
我从https://en.cppreference.com/w/cpp/language/copy_initialization得到的规则说:
转换的结果,如果使用了转换构造函数,则为纯右值表达式,然后用于直接初始化对象