Creo que la pregunta es bastante clara. ¿La autopalabra clave detectará automáticamente la const-ness, o siempre devolverá un tipo no const, incluso si hay, por ejemplo. dos versiones de una función (una que regresa consty la otra que no).
Solo para que conste, lo uso const auto end = some_container.end()antes de mis bucles for, pero no sé si esto es necesario o incluso diferente de lo normal auto.

cbeginycenddevuelve unconst_iteratorpor valor.const autotodavía tiene su propósito y no es redundante.const autoes útil en este caso general?const auto x = expr;difiere de
auto x = expr;como
const X x = expr;difiere de
Así que usa
const autoyconst auto&mucho, como lo harías si no tuvierasauto.La resolución de sobrecarga no se ve afectada por el tipo de retorno:
consto noconsten lvaluexno afecta a qué funciones se llamanexpr.fuente
const.Considere que tiene dos plantillas:
template<class U> void f1( U& u ); // 1 template<class U> void f2( const U& u ); // 2autodeducirá el tipo y la variable tendrá el mismo tipo que el parámetrou(como en el// 1caso),const autohará que la variable sea del mismo tipo que el parámetroutiene en el// 2caso. Así queconst autoforzarconstcalificador.fuente
El compilador deduce el tipo del calificador automático. Si un tipo deducido es
some_type,const autose convertirá enconst some_type. Sin embargo, un buen compilador examinará todo el alcance de laautovariable y encontrará si su valor cambia en alguna parte. De lo contrario, el propio compilador deducirá un tipo como este:auto->const some_type. Probé esto en Visual Studio Express 2012 y el código de máquina producido es el mismo en ambos casos, no estoy seguro de que todos y cada uno de los compiladores hagan eso. Sin embargo, es una buena práctica utilizarlaconst autopor tres razones:constdeauto.fuente
constporautosi no cambia la funcionalidad del programa de ninguna manera . Eso también incluye verificaciones si hay funciones de miembro const y no const disponibles. El compilador lo hará bien.