У чому відмінність - від - на прикладі конструктора копіювання і конструктора перенесення stack overflow на

Припустимо, у нас є клас зі звичайним конструктором:

І припустимо, що я додав туди конструктор копіювання і конструктор переміщення (перенесення):

Тут один нюанс: конструктор копіювання не копіюватиме, він теж буде виконувати перенос.

У чому тоді відмінність? Якщо фактично відбувається одне і теж. Code :: Blocks видає різницю в секунду. Думаю, тоді питання постає між використанням і .

заданий 29 Січня '16 о 14:20

Змінна з типом T може приймати тільки r-value вираз,
змінна з типом T може приймати тільки не константні l-value вираження.
Зовсім не важливо, що це за змінна - агрумент конструктора чи ні.

Відповідно різниця між SomeClass (SomeClass other) і SomeClass (SomeClass other) - тільки в тому, що перший буде викликатися тільки для r-value виразів, а другий - тільки для неконстантних l-value виразів.
При цьому жоден з них не може приймати const SomeClass .

відповідь дан 29 Січня '16 о 17:11

Правильна сигнатура конструктора копіювання така:

відповідь дан 29 Січня '16 о 14:38

Будь нешаблонний конструктор, що приймає посилання на клас, є копіюють конструктором цього класу. Незалежно від наявності або відсутності const і / або volatile. - alexolut 29 Січня '16 о 14:51

У чому тоді профіт?

Rvalue посилання дозволяють програмістам уникати логічно непотрібного копіювання і забезпечувати можливість ідеальної передачі (perfect forwarding). Перш за все вони призначені для використання в високопродуктивних проектах і бібліотеках.

відповідь дан 29 Січня '16 о 17:22