В C ++ 98 и C ++ 03 вы должны передать const& bar
, а затем скопировать. В C ++ 0x вы должны передать bar
, а затем сделать ход (при условии, что bar
имеет конструктор перемещения).
#include <utility>
struct foo
{
bar _b;
foo(bar b) : _b(std::move(b)) {}
};
Если вы создаете foo с параметром lvalue, конструктор копирования будет вызываться для создания копии b
, и эта копия будет перенесена в _b
. Если вы построите foo с параметром rvalue, конструктор перемещения bar
будет вызываться для перехода в b
, а затем он будет снова перемещен в _b
.