60 votes

Transformation de non const en const en c++

Je sais que vous pouvez utiliser const_cast pour convertir un const en un non-const.

Mais que devez-vous utiliser si vous voulez convertir un non-const en const ?

56voto

Motti Points 32921

const_cast peut être utilisé pour enlever ou ajouter de la constance à un objet. Cela peut être utile lorsque vous voulez appeler une surcharge spécifique.

Exemple artificiel :

class foo {
    int i;
public:
    foo(int i) : i(i) { }

    int bar() const {
        return i;    
    }

    int bar() { // pas const
        i++;
        return const_cast(this)->bar(); 
    }
};

40voto

Scott Langham Points 17447

STL depuis C++17 fournit maintenant 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(variable) );

30voto

Ozair Kafray Points 7445

Vous n'avez pas besoin de const_cast pour ajouter de la constance :

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

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

6voto

Jerry Coffin Points 237758

Vous pouvez utiliser un const_cast si vous le souhaitez, mais ce n'est pas vraiment nécessaire - le non-const peut être converti en const implicitement.

2voto

Guillaume07 Points 3322

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X