Je sais que vous pouvez utiliser const_cast
pour convertir un const
en un nonconst
.
Mais que devez-vous utiliser si vous souhaitez convertir non -const
en const
?
const_cast
peut être utilisé pour supprimer o ajouter de la constance à un objet. Cela peut être utile lorsque vous souhaitez appeler une surcharge spécifique.
Exemple artificiel:
class foo {
int i;
public:
foo(int i) : i(i) { }
int bar() const {
return i;
}
int bar() { // not const
i++;
return const_cast<const foo*>(this)->bar();
}
};
Vous n'avez pas besoin de const_cast
pour ajouter const
ness:
class C;
C c;
C const& const_c = c;
Veuillez lire ceci question et réponse pour plus de détails.
STL depuis C++ 17 fournit désormais std::as_const
pour exactement ce cas.
Voir: http://en.cppreference.com/w/cpp/utility/as_const
Utilisation:
CallFunc( as_const(variable) );
Au lieu de:
CallFunc( const_cast<const decltype(variable)>(variable) );
Vous pouvez utiliser un const_cast
si vous le souhaitez, mais ce n'est pas vraiment nécessaire - non-const peut être converti en const implicitement.
Vous avez une conversion implicite si vous passez un argument non const à une fonction qui a un paramètre const
const_cast
peut également être utilisé pour ajouter le comportement const
ness.
De cplusplus.com :
Ce type de transtypage manipule la constance d'un objet, à définir ou à supprimer.