尝试编译以下代码:
struct Foo
{
explicit Foo ( void ) { }
explicit Foo ( Foo&& rhs ) { }
};
Foo bar ( void )
{
return Foo();
}
收到以下错误:
调用 'Foo' 的隐式删除的复制构造函数
好吧,很明显 copy-ctor 被隐式删除了。
问题1:为什么编译器需要copy-ctor Foo
?我期望 的返回值是用 move-ctor 从右bar
值构造的。Foo()
然后我将 move-ctor 重新声明为隐式,一切都成功编译。
问题 2:为什么当我将 move-ctor 重新声明为隐式时,编译器不再需要 copy-ctor?
问题 3:关键字在复制和移动 ctor 的上下文中意味着什么explicit
,因为它肯定意味着与常规 ctor 的上下文不同的东西。