С выпуском GCC 4.8.0 у нас есть компилятор, который поддерживает автоматический вывод типа возвращаемого типа, часть С++ 14. С помощью -std=c++1y
я могу сделать это:
auto foo() { //deduced to be int
return 5;
}
Мой вопрос: когда следует использовать эту функцию? Когда это необходимо и когда он делает очиститель кода?
Сценарий 1
Первый сценарий, о котором я могу думать, по возможности. Каждая функция, которая может быть написана таким образом, должна быть. Проблема заключается в том, что он не всегда может сделать код более удобочитаемым.
Сценарий 2
Следующий сценарий - избегать более сложных типов возвращаемых данных. В качестве очень легкого примера:
template<typename T, typename U>
auto add(T t, U u) { //almost deduced as decltype(t + u): decltype(auto) would
return t + u;
}
Я не верю, что это действительно будет проблемой, хотя я предполагаю, что в некоторых случаях тип возврата явно зависит от параметров.
Сценарий 3
Далее, чтобы предотвратить избыточность:
auto foo() {
std::vector<std::map<std::pair<int, double>, int>> ret;
//fill ret in with stuff
return ret;
}
В С++ 11 вместо вектора мы можем просто просто return {5, 6, 7};
, но это не всегда получается, и нам нужно указать тип как в заголовке функции, так и в теле функции. Это чисто избыточно, и автоматический возврат типа возврата избавляет нас от этой избыточности.
Сценарий 4
Наконец, его можно использовать вместо очень простых функций:
auto position() {
return pos_;
}
auto area() {
return length_ * width_;
}
Иногда, однако, мы можем посмотреть на функцию, желая узнать точный тип, и если она там не указана, нам нужно перейти к другой точке кода, например, когда объявлен pos_
.
Заключение
С этими сценариями, какие из них на самом деле оказываются ситуацией, когда эта функция полезна для очистки кода? Как насчет сценариев, о которых я не упоминал здесь? Какие меры предосторожности следует принять перед использованием этой функции, чтобы она не укусила меня позже? Есть ли что-то новое в этой таблице, которое невозможно без него?
Обратите внимание, что множественные вопросы предназначены для помощи в поиске перспектив, от которых можно ответить на этот вопрос.