c – 从*值转换为rvalue方法?
|
在C 11中,方法可以重载,表示方法被调用的对象的表达式是否为左值或右值.如果我从一个通过rvalue调用的方法返回*,我需要明确地从*这个或者不是?
Foo Foo::method() &&
{
return std::move(*this); // Is this move required or not?
}
不幸的是,我不能简单地测试这个在我的编译器,因为g不支持这个功能:( 解决方法
这个类型总是一个左派:
§9.3.2[class.this] p1
§5.3.1[expr.unary.op] p1
所以你需要std :: move如果你想调用move构造函数. 以下代码片段显示: #include <iostream>
#include <utility>
struct test{
test(){}
test(test const&){ std::cout << "copy ctor // #1n"; }
test(test&&){ std::cout << "move ctor // #2n"; }
test f_no_move() &&{ return *this; }
test f_move() &&{ return std::move(*this); }
};
int main(){
test().f_no_move(); // #1
test().f_move(); // #2
}
使用Clang 3.1(我知道实现ref-qualifiers的唯一编译器),我得到以下输出:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
