От Википедия
Какая польза от ключевого слова auto
в этом случае (ниже), если не автоматическое удержание типа?
struct SomeStruct {
auto func_name(int x, int y) -> int;
};
auto SomeStruct::func_name(int x, int y) -> int {return x + y; }
В каких ситуациях нужно эксплицитно есть типы?
Это конечный тип возврата. auto
это просто заполнитель, который указывает, что возвращаемый тип приходит позже.
Причина этого заключается в том, что имена параметров могут использоваться при вычислении возвращаемого типа:
template<typename L, typename R>
auto add(L l, R r) -> decltype(l+r) { return l+r; }
Альтернатива:
template<typename L, typename R>
decltype(std::declval<L>()+std::declval<R>())
add(L l, R r)
{ return l+r; }
Вполне вероятно, что в будущем добавление к языку позволит пропустить завершающий тип возврата и вместо этого использовать автоматическое вычитание типа, как это разрешено для лямбд.
template<typename L, typename R>
auto add(L l, R r) { return l+r; }
Других решений пока нет …