Maison > Article > développement back-end > Quels sont les opérateurs qui ne peuvent pas être surchargés en C++ ?
Il existe 5 opérateurs qui ne peuvent pas être surchargés en C++ : "?:", ".", "::", "sizeof", ".*". Une confusion peut survenir si les opérateurs "." et "::" sont surchargés ; l'opérateur "sizeof" ne peut pas être surchargé car de nombreux pointeurs s'appuient sur lui en interne ;
L'environnement d'exploitation de ce tutoriel : système Windows 7, version C++17, ordinateur Dell G3.
Il existe 5 opérateurs qui ne peuvent pas être surchargés en C++, à savoir : "?:" "." "::" "sizeof" ".*" .
Surcharge : permettre aux opérateurs d'avoir une nouvelle sémantique au lieu de changer la syntaxe, ce qui créerait de la confusion.
Une partie des règles de surcharge : au moins un paramètre de la fonction opération doit être un objet de la classe ou une référence à l'objet de la classe.
Ce qui suit explique pourquoi ces opérateurs ne peuvent pas être surchargés.
(1)?:
En supposant qu'il puisse être surchargé, alors regardons le code suivant :
exp1 ? exp2 : exp3
La signification de cet opérateur est d'exécuter exp2 et exp3 Si l'un d'eux est surchargé, il n'y a aucune garantie qu'un, deux ou aucun des deux seront exécutés, et la propriété jump de l'opérateur n'existera plus. Par conséquent, « ? : » ne peut pas être surchargé.
(2).
En supposant qu'il puisse être surchargé, nous pouvons supposer une situation où nous créons un objet et appelons la fonction de l'objet.
class Y{ public: void fun(); }; class X{ public: Y* p; Y& operator.(){ return *p; } void fun(); } void g(X& x){ x.fun(); }
Dans cet exemple, x.fun() ne sait pas quelle fonction amusante est appelée.
La signification de l'opérateur "." est de référencer les membres d'un objet. Cependant, cela n'est plus garanti après une surcharge, ce qui entraîne une confusion sur la signification de l'opérateur.
(3)::
Cet opérateur effectue uniquement l'analyse de domaine lors de la compilation et ne participe pas aux opérations. Selon les règles de surcharge, si l'opérateur est surchargé, une nouvelle sémantique est donnée et une confusion peut survenir.
(4) sizeof
ne peut pas être surchargé principalement parce que de nombreux pointeurs internes reposent sur sizeof.
(5).*
fait référence à un pointeur vers un membre de la classe
Informations étendues :
Surchargé fonctionnement Principes que les opérateurs respectent :
1. Les opérateurs surchargés ne peuvent pas être connectés à d'autres symboles pour créer de nouveaux opérateurs.
2. L'opérateur surchargé doit avoir un opérande de type classe ou de type énumération.
3. La signification des opérateurs de type intégrés ne peut pas être modifiée, comme l'addition d'entiers (+).
4. Les opérateurs surchargés ne peuvent garantir l'ordre des opérateurs.
5. Fonctions surchargées des membres de la classe, dont les paramètres formels impliquent un pointeur this par défaut.
6. Généralement, les opérateurs d'affectation sont définis comme des fonctions membres et les opérateurs arithmétiques sont définis comme des fonctions non membres.
7. Lorsqu'un opérateur est défini comme fonction membre d'une non-classe, il est généralement défini comme un ami de la classe.
8. == et != doivent apparaître par paires.
9. Opérateur d'indice [] : un membre non const et renvoie une référence, et un membre const et renvoie une référence.
10. Les opérateurs * et -> n'affichent aucun paramètre.
11. Le préfixe ++/-- doit renvoyer une référence incrémentée ou décrémentée.
12. Les opérateurs d'entrée et les opérateurs de sortie doivent être définis comme fonctions amies de la classe.
Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à la programmation ! !
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!