Сообщение Re[11]: КОгда выбирается move-constructor? от 14.07.2017 12:08
Изменено 14.07.2017 12:18 night beast
Re[11]: КОгда выбирается move-constructor?
Здравствуйте, jazzer, Вы писали:
NB>>std::move нужен? если не нужен, то какой по твоему вызовется конструктор?
J>нужен,
воот. о чем и речь.
J>чтоб lvalue типа TOnlyMovable&& превратить в xvalue того же самого типа TOnlyMovable&& — тогда из перегрузке будет выбран конструктор перемещения.
J>Тип rvalue reference и там, и там, разница в lvalue/xvalue.
отсюда:
NB>>std::move нужен? если не нужен, то какой по твоему вызовется конструктор?
J>нужен,
воот. о чем и речь.
J>чтоб lvalue типа TOnlyMovable&& превратить в xvalue того же самого типа TOnlyMovable&& — тогда из перегрузке будет выбран конструктор перемещения.
J>Тип rvalue reference и там, и там, разница в lvalue/xvalue.
отсюда:
Named rvalue references are lvalues. Unnamed rvalue references are rvalues. This is important to understand why the std::move call is necessary in: foo&& r = foo(); foo f = std::move(r);
Re[11]: КОгда выбирается move-constructor?
Здравствуйте, jazzer, Вы писали:
NB>>std::move нужен? если не нужен, то какой по твоему вызовется конструктор?
J>нужен,
воот. о чем и речь.
J>чтоб lvalue типа TOnlyMovable&& превратить в xvalue того же самого типа TOnlyMovable&& — тогда из перегрузке будет выбран конструктор перемещения.
J>Тип rvalue reference и там, и там, разница в lvalue/xvalue.
отсюда:
из стандарта:
NB>>std::move нужен? если не нужен, то какой по твоему вызовется конструктор?
J>нужен,
воот. о чем и речь.
J>чтоб lvalue типа TOnlyMovable&& превратить в xvalue того же самого типа TOnlyMovable&& — тогда из перегрузке будет выбран конструктор перемещения.
J>Тип rvalue reference и там, и там, разница в lvalue/xvalue.
отсюда:
Named rvalue references are lvalues. Unnamed rvalue references are rvalues. This is important to understand why the std::move call is necessary in: foo&& r = foo(); foo f = std::move(r);
из стандарта:
In general, the effect of this rule is that named rvalue references are treated as lvalues and unnamed rvalue
references to objects are treated as xvalues; rvalue references to functions are treated as lvalues whether
named or not.