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的唯一编译器),我得到以下输出:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |