我有class
这样:
class Widget
{
public:
Widget(A const& a) { /* do something */ }
Widget(A&& a) { /* do something */ }
};
我可以这样使用:
A a{};
Widget widget{a};
如果我得出的结论是我不再需要a
,我可以致电:
Widget{std::move(a)};
但是现在如果我只需要构建A
的{{1}}对象怎么办?我会这样做:
widget
或
Widget widget{A{}};
答案 0 :(得分:4)
临时是左值;没有"临时左值"。由于Widget widget{A{}};
是Widget(A&& a)
,A{}
会致电std::move
。如果你有一个左值,你想使用A a{};
Widget widget{std::move(a)};
,你想像它一样使它成为右值:
Widget foo(A&& a);
使用它的另一个原因是,如果你在一个带rvalue的函数中,并且你想将它移动到构造函数中。有了这个功能
a
std::move
是函数体中的左值。如果您想将其转换回右值,则需要使用Widget foo(A&& a)
{
Widget widget{std::move(a)};
}
之类的
Sys.OleObject