Maison > développement back-end > C++ > Const vs. Non-Const Getters : existe-t-il un meilleur moyen que le casting ?

Const vs. Non-Const Getters : existe-t-il un meilleur moyen que le casting ?

Susan Sarandon
Libérer: 2024-12-07 05:22:13
original
561 Les gens l'ont consulté

Const vs. Non-Const Getters: Is There a Better Way Than Casting?

Gitters const et non-const : une solution élégante

Les getters surchargés avec des variantes const et non-const présentent une énigme de programmation. L'implémentation directe de l'un à partir de l'autre entraîne des erreurs de compilation, obligeant les développeurs à recourir au casting. Existe-t-il une approche plus gracieuse ?

Le défi

Considérez la classe suivante avec les méthodes getSomething :

class Foobar {
public:
    Something& getSomething(int index);
    const Something& getSomething(int index) const;
};
Copier après la connexion

Implémentation d'une méthode en utilisant l'autre n'est pas réalisable en raison de l'incapacité de la version const à appeler la version non const. Le casting est nécessaire, mais il semble fastidieux et peut prêter à confusion.

La solution : lancer avec prudence

Effective C suggère de supprimer le const de la fonction const pour implémentez la fonction non const. Bien que cela ne soit pas visuellement attrayant, il s’agit d’une approche sûre. Puisque la fonction membre non const est appelée, l'objet doit être non const et il est permis de supprimer le const.

Voici un exemple :

class Foo {
public:
    const int& get() const;
    int& get();
};

const int& Foo::get() const {
    // Non-trivial work
    return foo;
}

int& Foo::get() {
    return const_cast<int&>(const_cast<const Foo*>(this)->get());
}
Copier après la connexion

En suivant cette approche , vous pouvez réaliser des implémentations de getter const et non const de sécurité de type sans sacrifier les performances ni introduire de complexité inutile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal