我知道这没关系:
struct Foo {
Foo& operator=( Foo& ) = delete; // disallow assign
Foo( int ) { } // some basic constructor
Foo( const Foo& ) = delete; // disallow copy
Foo( Foo&& ) { } // allow move
};
Foo getFoo( void ) {
return Foo( 3 );
}
Foo foo = getFoo( ); // uses move constructor
而这将使用复制构造函数,因此对于(并且对于具有Foo
复制构造函数的任何对象,它将有效但效率低下)无效:
const Foo getConstFoo( void ) {
return Foo( 3 );
}
const Foo constFoo = getConstFoo( ); // error: copy constructor is deleted!
但这没关系:(并且会延长寿命constFooRef
)
const Foo& constFooRef = getConstFoo( ); // uses move constructor
现在,第二种情况将调用
Foo( const Foo&& ) { }
如果可用。所以我想知道是否有任何方法可以检测到最终对象将const
来自该构造函数内部。如果有,我可以应用移动语义(因为两个涉及的对象都是 const 并且该参数没有在其他地方使用,所以可以抛弃 const-ness),并使第二种情况合法。
因此,虽然我的问题标题解释了我试图实现的最终结果,但我的子问题是检测一个对象在构造后是否为 const(我天真地尝试过Foo( const Foo&& ) const { }
,但没有运气!)