auto
(en el contexto donde se deduce un tipo) se limita a definir el tipo de una variable para la que hay un inicializador. decltype
es una construcción más amplia que, a costa de información adicional, deducirá el tipo de una expresión.
En los casos en que se puede usar auto
, es más conciso que decltype
, ya que no es necesario proporcionar la expresión de la que se deducirá el tipo.
auto x = foo(); // more concise than `decltype(foo()) x`
std::vector<decltype(foo())> v{ foo() }; // cannot use `auto`
La palabra clave auto
también se utiliza en un contexto completamente ajenos, al utilizar trailing tipos de retorno para las funciones:
auto foo() -> int;
Hay auto
es sólo un líder para que el compilador sabe que esto es una declaración con un tipo de retorno final. Aunque el ejemplo anterior puede ser trivial se convirtió al estilo antiguo, en la programación genérica es útil:
template <typename T, typename U>
auto sum(T t, U u) -> decltype(t+u)
Tenga en cuenta que en este caso, auto
no se puede utilizar para definir el tipo de retorno.
@JesseGood Antes de hacer la pregunta, leí ese hilo y estoy buscando una explicación más clara –
Preguntas similares: [1]: http://stackoverflow.com/questions/11459928/equivalence-between-decltype-and- auto [2]: http://stackoverflow.com/questions/6869888/the-relationship-between-auto-and-decltype – crnlx
@JamesLeonard: Bueno, bueno, no sé una mejor explicación [que la de Scott Meyers] (http: // cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c /). –