Сообщение Re[2]: decltype() возвращаемый тип от 17.10.2018 10:55
Изменено 17.10.2018 11:04 rg45
Re[2]: decltype() возвращаемый тип
Здравствуйте, B0FEE664, Вы писали:
BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать:
BFE>
BFE>Никаких принципиальных проблем тут нет.
Ну как сказать. В примере ниже foo возвращает lvalue, а bar — rvalue.
Но есть еще вариант:
Здесь опять lvalue.
BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать:
BFE>
BFE>auto get(Container& c, int i);
BFE>
BFE>Никаких принципиальных проблем тут нет.
Ну как сказать. В примере ниже foo возвращает lvalue, а bar — rvalue.
auto foo(Container& c, int i) -> decltype(c[i]);
auto bar(Container& c, int i) { return c[i]; }
Но есть еще вариант:
decltype(auto) baz(Container& c, int i) { return c[i]; }
Здесь опять lvalue.
Re[2]: decltype() возвращаемый тип
Здравствуйте, B0FEE664, Вы писали:
МР>Почему такой кривой синтаксис?
МР>
BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать:
BFE>
BFE>Никаких принципиальных проблем тут нет.
Ну как сказать. Оригинальный вариант возвращет lvalue, а второй — rvalue
Но есть еще один вариант:
Здесь опять lvalue.
МР>Почему такой кривой синтаксис?
МР>
МР>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.