Je pense que la question est suffisamment claire. Le mot-clé auto
détectera-t-il automatiquement la constance, ou retournera-t-il toujours un type non const, même s'il y a par exemple. deux versions d'une fonction (une qui renvoie const
et l'autre qui ne le fait pas).
Pour mémoire, j'utilise const auto end = some_container.end()
avant mes boucles for, mais je ne sais pas si cela est nécessaire ou même différent de la normale auto
.
Vous confondez peut-être const_iterator
Et const iterator
. Le premier itère sur les éléments const, le second ne peut pas du tout itérer car vous ne pouvez pas utiliser operators
++ et - dessus.
Notez que vous parcourez très rarement la container.end()
. Habituellement, vous utiliserez:
const auto end = container.end();
for (auto i = container.begin(); i != end; ++i) { ... }
const auto x = expr;
diffère de
auto x = expr;
comme
const X x = expr;
diffère de
X x = expr;
Utilisez donc const auto
et const auto&
beaucoup, comme vous le feriez si vous n'aviez pas auto
.
La résolution de surcharge n'est pas affectée par le type de retour: const
ou non const
sur la valeur l x
n'affecte pas les fonctions appelées dans expr
.
Considérez que vous avez deux modèles:
template<class U> void f1( U& u ); // 1
template<class U> void f2( const U& u ); // 2
auto
en déduira le type et la variable aura le même type que le paramètre u
(comme dans le // 1
Cas), const auto
rendra la variable du même type que le paramètre u
a dans le // 2
Cas. Alors const auto
force juste const
qualificatif.
Le compilateur déduit le type du qualificatif automatique. Si un type déduit est some_type
, const auto
sera converti en const some_type
. Cependant, un bon compilateur examinera toute l'étendue de la variable auto
et trouvera si sa valeur change n'importe où. Sinon, le compilateur lui-même déduira le type comme ceci: auto
-> const some_type
. J'ai essayé cela dans Visual studio express 2012 et le code machine produit est le même dans les deux cas, je ne suis pas sûr que chaque compilateur le fera. Mais, c'est une bonne pratique d'utiliser const auto
pour trois raisons:
const
pour auto
.