Какой тип объявить, чтобы избежать копирования и убедиться, что возвращаемое значение перемещено

Предположим, что

У меня есть функция;A f()Я хочу инициализировать локальную переменнуюa к возвращаемому значению;fЯ нене хочу полагаться на RVO;

Каков наилучший вариант (и почему), чтобы избежать возвращаемого значенияf копируется, когда

a возможно, придется изменитья знаю этоa не будет изменено

Опции:

а)A a = f(); б)A&& a = f(); с)const A& = f(); г)const A&& = f();

РЕДАКТИРОВАТЬ:

Я бы сказал:

б)с)

Потому что оба используют ссылки и избегают лишних копий (чего может избежать RVO, но это не гарантируется). Так почему же я вижу вариант а) предложенный большую часть времени?

Я предполагаю, что суть вопроса такова: я понимаю, что а) скорее всего имеет тот же эффект, что и в), так почему бы не использовать в) вместо а), чтобы сделать вещи явными и независимыми от компилятора?

Ответы на вопрос(2)

Ваш ответ на вопрос