在C++11中,方法可以根据调用该方法的对象表达式是左值还是右值进行重载。如果我从通过右值调用的方法返回
*this
,我是否需要显式地将*this
移动或不需要?Foo Foo::method() &&
{
return std::move(*this); // Is this move required or not?
}
很遗憾,我无法在我的编译器上测试这个功能,因为g++尚未支持此功能 :(
move
,因为this
是一个命名的右值引用,类似于函数接受右值参数。但是我不能引用具体章节和条款,所以这不算是一个答案 :) - jalf*E
是一个左值,但谁知道呢 :) 我从未听说过命名的右值。你确定是关于“this”的吗?(无恶意意图!) - fredoverflowfoo(X& x)
和foo(X&& x)
,那么foo(someX)
调用了什么,即someX
是X&
还是X&&
?答案是X&
,因为someX
有一个名称 -- 它是一个命名右值,它是一个X&
。如果我们调用foo(someX + something)
,那么它就是X&&
,因为表达式没有"名称"。 - Peter AlexandersomeX
是X&
还是X&&
?” -> 嗯,两者都不是吧?它只是一个X :) 我不认为someX
除了作为左值外还有其他的属性... - fredoverflow