Re[2]: decltype() возвращаемый тип
От: rg45 СССР  
Дата: 17.10.18 10:55
Оценка:
Здравствуйте, B0FEE664, Вы писали:

МР>Почему такой кривой синтаксис?

МР>
МР>template<typename Container>
МР>auto get(Container& c, int i) -> decltype(c[i]);
МР>


BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать:

BFE>
BFE>auto get(Container& c, int i);
BFE>

BFE>Никаких принципиальных проблем тут нет.

Ну это как посмотреть. Оригинальный вариант возвращет lvalue, а второй — rvalue

Но есть еще один вариант:

decltype(auto) get(Container& c, int i) { return c[i]; }


Здесь опять lvalue. Но появляется новая проблема (ограничение) — к функции нельзя обратиться, пока тип результата не будет выведен. Это создает некоторый дискомфорт при написании рекурсивных функций, чего нет для первого варианта, когда тип возвращаемого значения задан явно.
--
Отредактировано 17.10.2018 11:18 rg45 . Предыдущая версия . Еще …
Отредактировано 17.10.2018 11:15 rg45 . Предыдущая версия .
Отредактировано 17.10.2018 11:11 rg45 . Предыдущая версия .
Отредактировано 17.10.2018 11:05 rg45 . Предыдущая версия .
Отредактировано 17.10.2018 11:04 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.