Maison > développement back-end > C++ > Pourquoi les fonctions membres non Const provoquent-elles des erreurs lorsqu'elles sont utilisées avec des objets Const dans un `std::set` ?

Pourquoi les fonctions membres non Const provoquent-elles des erreurs lorsqu'elles sont utilisées avec des objets Const dans un `std::set` ?

Patricia Arquette
Libérer: 2024-12-15 12:56:30
original
751 Les gens l'ont consulté

Why Do Non-Const Member Functions Cause Errors When Used with Const Objects in a `std::set`?

Erreur lors de la transmission de fonctions membres non const aux objets Const

Dans le code fourni, un std::set est utilisé pour stocker StudentT objets. Le problème survient lors de la tentative d’appel des fonctions membres getId() et getName() sur des objets de l’ensemble. Ces fonctions membres ne sont pas marquées comme const, ce qui signifie qu'elles peuvent modifier les données de l'objet. Cependant, les objets dans std::set sont stockés sous const StudentT, empêchant toute modification.

Le compilateur détecte cette incohérence et génère les messages d'erreur suivants :

../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
Copier après la connexion

Cette erreur indique que le compilateur tente de transmettre un objet const comme argument this aux fonctions membres non const, ce qui est interdit.

Solution :

Pour résoudre ce problème, modifiez les fonctions membres getId() et getName() pour qu'elles soient const comme suit :

int getId() const {
    return id;
}

string getName() const {
    return name;
}
Copier après la connexion

En marquant ces fonctions comme const, vous vous assurez qu'elles ne modifieront pas les données de l'objet et qu'elles pourront être appelées en toute sécurité sur const objets.

De plus, il est également recommandé de créer le < fonction de comparaison d'opérateur const en passant des références const à ses paramètres :

inline bool operator< (const StudentT &s1, const StudentT &s2) {
    return s1.getId() < s2.getId();
}
Copier après la connexion

Ces modifications éviteront les erreurs inattendues et garantiront que le code fonctionne correctement.

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