web-dev-qa-db-fra.com

transtypage non const en const en c ++

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?

48
kamikaze_pilot

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(); 
    }
};
47
Motti

Vous n'avez pas besoin de const_cast pour ajouter constness:

class C;
C c;
C const& const_c = c;

Veuillez lire ceci question et réponse pour plus de détails.

28
Ozair Kafray

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) );
27
Scott Langham

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.

5
Jerry Coffin

Vous avez une conversion implicite si vous passez un argument non const à une fonction qui a un paramètre const

2
Guillaume07

const_cast peut également être utilisé pour ajouter le comportement constness.

De cplusplus.com :

Ce type de transtypage manipule la constance d'un objet, à définir ou à supprimer.

2
beduin