В чем смысл auto при использовании возвращаемого типа С++ trailing?
Вместо обычного
void foo (void ) {
cout << "Meaning of life: " << 42 << endl;
}
C++11
допускает альтернативу, используя Trailing Return
auto bar (void) -> void {
cout << "More meaning: " << 43 << endl;
}
В последнем - что такое auto
, предназначенное для представления?
В другом примере рассмотрим функцию
auto func (int i) -> int (*)[10] {
}
Тот же вопрос, что означает auto
в этом примере?
Ответы
Ответ 1
В общем, новое ключевое слово auto
в С++ 11 указывает, что тип выражения (в данном случае возвращаемого типа функции) должен быть выведен из результата выражения, в этом случае, что происходит после ->
.
Без этого функция не будет иметь никакого типа (таким образом, не является функцией), и компилятор будет запутан.
Ответ 2
Рассмотрим код:
template<typename T1, typename T2>
Tx Add(T1 t1, T2 t2)
{
return t1+t2;
}
Здесь тип возвращаемого значения зависит от выражения t1+t2
, которое, в свою очередь, зависит от того, как вызывается Add
. Если вы называете это как:
Add(1, 1.4);
T1
будет int
, а T2
будет double
. Результирующий тип теперь равен double
(int + double). И, следовательно, Tx
следует (обязательно) указывать, используя auto
и ->
template<typename T1, typename T2>
auto Add(T1 t1, T2 t2) -> decltype(t1+t2)
{
return t1+t2;
}
Вы можете прочитать об этом в моей статье.