Maison >développement back-end >C++ >Const std::map Accès : `operator[]` vs `at()` – Lequel devriez-vous utiliser ?
Accès aux éléments d'une carte Const avec Operator[] vs. at()
Lorsque vous travaillez avec une constante std::map, l'accès les éléments utilisant l'opérateur[] peuvent être problématiques. Bien qu'il puisse sembler intuitif d'utiliser cette méthode, sa compilation échoue. En effet, l'opérateur[] s'attend à ce qu'une carte non const modifie la carte si la clé n'existe pas.
Cependant, il existe une méthode alternative, at(), qui a été introduite en C 11 spécifiquement pour ce but. Contrairement à Operator[], at() lève une exception std::out_of_range si la clé n'existe pas, plutôt que d'insérer un élément construit par défaut.
Ce comportement s'aligne bien avec le concept de carte constante. En définissant une surcharge const de at(), cela permet un accès sûr et efficace aux éléments sans risque de modifications involontaires.
Pour illustrer, considérons l'exemple suivant :
#include <iostream> #include <map> int main() { std::map<int, char> A; A[1] = 'b'; A[3] = 'c'; const std::map<int, char> B = A; std::cout << B.at(3) << std::endl; // works std::cout << B[3] << std::endl; // cannot access (compile error) }
Dans ce scénario, l'utilisation de Operator[] sur B entraînerait une erreur de compilation, car il s'agit d'une carte const et ne peut pas être modifiée. Cependant, la méthode at() fonctionne parfaitement car elle est consciente de la nature const de la carte et lève une exception si la clé n'existe pas.
Par conséquent, pour accéder aux éléments d'un const std::map, at() est l'approche recommandée et la plus sûre pour éviter les modifications involontaires. Plus d'informations sur cette fonctionnalité peuvent être trouvées dans la norme C 11 ou dans la documentation relative à la classe std::map.
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!