Информация об изменениях

Сообщение 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.

отсюда:

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.

отсюда:

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.