【发布时间】:2016-02-20 19:57:18
【问题描述】:
考虑下面的代码:
struct Bar{};
struct Foo
{
Foo() = default;
Foo(const Bar&) {}
Foo(const Foo&) = delete;
// IMPLICIT conversion to Bar
operator Bar(){return {};}
};
int main()
{
Foo f1;
Foo f2(static_cast<Bar>(f1)); // this is OK
Foo f3(f1); // does not compile, why not implicit conversion to `Bar`?
}
Bar 类有一个用户定义的到Foo 的转换运算符,它接受Bar&s。但是,在main 的最后一行中,我希望Foo f1 被转换为Bar,然后传递给Foo(const Bar&)。但是,只考虑删除的构造函数Foo(const Foo&) = delete;。我知道这个构造函数更匹配,但是为什么Foo(const Bar&)不在重载集中,为什么编译器不执行隐式转换?
【问题讨论】:
标签: c++ implicit-conversion constructor-overloading