decltype(auto)
может выводить значение и ссылка. auto
никогда не выводит ссылку. Мне кажется, что общий код и оптимизация decltype(auto)
всегда должны быть предпочтительными. Это так? Рассмотрим, например, возврат объекта, который может или не может быть скопирован. auto&
требуется, чтобы избежать его копирования, но это заставляет его всегда ссылаться. decltype(auto)
- правильный вариант в этом случае. Каковы недостатки decltype(auto)
помимо более типизации?
Почти всегда decltype (авто)?
Ответ 1
Из часто задаваемых вопросов isocpp С++ 14 на decltype(auto)
:
Примечание. decltype (auto) в первую очередь полезен для вывода возвращаемого типа функций пересылки и аналогичных оболочек, как показано выше, где вы хотите, чтобы тип точно "отслеживал" какое-то выражение, вызываемое вами. Однако decltype (auto) не является широко используемой функцией, кроме этого. В частности, хотя он может быть использован для объявления локальных переменных, это, вероятно, просто антипаттерн, поскольку ссылка на локальные переменные не должна зависеть от выражения инициализации. Кроме того, он чувствителен к тому, как вы пишете оператор return. Эти две функции имеют разные типы возврата.
look_up_a_string_1
возвращает astring
, аlook_up_a_string_2
возвращает astring&
.
decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; }
decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); }