0

Я хотел бы предоставить определение конструктора только один раз - для lvalue и rvalue.вызов rvalue-constructor из lvalue-constructor

class A; 

class B { 
    B(A const& a): B(A(a)) {} 
    B(A&&); 
}; 

Гарантируется ли B::B(A&&) называться по B::B(A const&)?

+0

Ну, вышесказанное не компилируется, так как 'A' не определен? – Yakk

+0

Есть ли причина, по которой вы не используете совершенную пересылку? – TartanLlama

+1

Это эквивалентно определению только 'B (A)'. Сохраните несколько нажатий клавиш. – Casey

ответ

1

Да, поскольку вы делегируете конструктору с одним временным аргументом типа A, значение rvalue является значением xvalue.