Какой тип объявить, чтобы избежать копирования и убедиться, что возвращаемое значение перемещено
Предположим, что
У меня есть функция;A f()
Я хочу инициализировать локальную переменнуюa
к возвращаемому значению;f
Я нене хочу полагаться на RVO;Каков наилучший вариант (и почему), чтобы избежать возвращаемого значенияf
копируется, когда
a
возможно, придется изменитья знаю этоa
не будет измененоОпции:
а)A a = f();
б)A&& a = f();
с)const A& = f();
г)const A&& = f();
РЕДАКТИРОВАТЬ:
Я бы сказал:
б)с)Потому что оба используют ссылки и избегают лишних копий (чего может избежать RVO, но это не гарантируется). Так почему же я вижу вариант а) предложенный большую часть времени?
Я предполагаю, что суть вопроса такова: я понимаю, что а) скорее всего имеет тот же эффект, что и в), так почему бы не использовать в) вместо а), чтобы сделать вещи явными и независимыми от компилятора?