В чем смысл 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;
    }

Вы можете прочитать об этом в моей статье.