Можно объявить функцию так, чтобы узнать возвращаемый тип по типу возвращаемого выражения:
auto foo();
Можно объявить так, чтобы написать возвращаемый тип в конце:
auto bar() -> int;
Но что означает следующий синтаксис?
auto baz() -> auto;
Грамматически, синтаксис auto baz() -> auto;
является корректным в соответствии с https://eel.is/c++draft/dcl.decl#5 и https://eel.is/c++draft/dcl.spec.auto#3.
noptr-declarator parameters-and-qualifiers trailing-return-type
The placeholder type can appear with a function declarator in the decl-specifier-seq, type-specifier-seq, conversion-function-id, or trailing-return-type, in any context where such a declarator is valid.
Про значение написано далее в https://eel.is/c++draft/dcl.spec.auto#3:
If the function declarator includes a trailing-return-type ([dcl.fct]), that trailing-return-type specifies the declared return type of the function.
То есть возвращаемый тип определяется -> auto
в нашем случае. И далее в том же пункте:
If the declared return type of the function contains a placeholder type, the return type of the function is deduced from non-discarded return statements, if any, in the body of the function.
Таким образом, разница между 1 и 3 только формальная: в первом случае declared return type
будет placeholder type auto
до параметров, а в третьем -- placeholder type auto
после. Но, так как это один и тот же placeholder type auto
, то поведение у них одинаковое, а именно: the return type of the function is deduced from non-discarded return statements, if any, in the body of the function
.
Это комбинация 1 и 2 случаев. Эквивалентна 1 по поведению.
Возвращаемое значение функции будет вычислено на основе типа выражения после return. Можно почитать тут https://en.cppreference.com/w/cpp/language/auto
The auto specifier may also be used with a function declarator that is followed by a trailing return type, in which case the declared return type is that trailing return type (which may again be a placeholder type).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Какое поведение следует ожидать при запуске MPI программы без mpiexec/mpirun, но скомпилированной с помощью MPI компилятора? Специфицировано ли оно...
Создал линейный список и заполнил числами от 0 до 10Как удалить элемент списка, значение которого равно 5? Пожалуйста, подскажите
Нужен способ вытаскивать инфу из msi пакетаНашел решение в инете, на его основе сделал класс