在右值方法中从 *this 移动?
在 C++11 中,无论调用方法的对象的表达式是左值还是右值,都可以重载方法。如果我从通过右值调用的方法返回 *this
,我是否需要显式地从 *this
中move
?
Foo Foo::method() &&
{
return std::move(*this); // Is this move required or not?
}
不幸的是,我不能简单地在我的编译器上测试这个,因为 g++ 还不支持这个功能:(
In C++11, methods can be overloaded on whether or not the expression that denotes the object on which the method is called is an lvalue or an rvalue. If I return *this
from a method called via an rvalue, do I need to explicitly move
from *this
or not?
Foo Foo::method() &&
{
return std::move(*this); // Is this move required or not?
}
Unfortunately, I can't simply test this on my compiler since g++ does not support this feature yet :(
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
*this
的类型始终为左值:§9.3.2 [class.this] p1
§5.3.1 [expr.unary.op] p1
因此,如果您想调用移动构造函数,则需要
std::move
。以下代码片段显示:
使用 Clang 3.1(我知道的唯一实现引用限定符的编译器),我得到以下输出:
The type of
*this
is always an lvalue:§9.3.2 [class.this] p1
§5.3.1 [expr.unary.op] p1
So you will need to
std::move
if you want to invoke the move constructor.The following code snippet shows that:
Using Clang 3.1 (the only compiler I know that implements ref-qualifiers), I get the following output: