*" et ".*"."/> *" et ".*".">

Maison >développement back-end >Tutoriel C#.Net >Quels opérateurs C++ ne peuvent pas être surchargés ?

Quels opérateurs C++ ne peuvent pas être surchargés ?

青灯夜游
青灯夜游original
2020-12-21 15:20:1514424parcourir

Les opérateurs C++ qui ne peuvent pas être surchargés sont : 1. Opérateur conditionnel "?:" ; 2. Opérateur d'accès aux membres "." 3. Opérateur de domaine "::" 4. Opérateur d'opération de longueur "sizeof" ; ; 5. Opérateurs d'accès au pointeur de membre "->*" et ".*".

Quels opérateurs C++ ne peuvent pas être surchargés ?

Recommandations associées : "Tutoriel vidéo C++"

Surcharge : permettre aux opérateurs d'avoir une nouvelle sémantique, plutôt que de changer la syntaxe, ce qui prêterait à confusion.

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.

Il existe 5 opérateurs qui ne peuvent pas être surchargés en C++, à savoir :

  • "?:" (opérateur conditionnel)

  • "." (opérateur d'accès aux membres)

  • "::" (opérateur de champ)

  • "sizeof" (opérateur de longueur)

  • « ->* » et « .* » (opérateur d'accès au pointeur de membre)

Donc, pourquoi les opérateurs ne peuvent-ils pas être surchargés ? Introduction de la raison :

(1) “?:”

En supposant qu'il puisse être surchargé, regardons le code suivant :

exp1 ? exp2 : exp3

Cet opérateur Le sens est d'exécuter l'un des exp2 et exp3. S'il 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 ne peut pas être garanti après une surcharge, ce qui entraîne une confusion sur la signification de l'opérateur.

(3)“::”

Cet opérateur est uniquement le domaine analysé 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 dépendent de sizeof.

(5)“->*”和“.*”

Pointeurs de référence vers les membres de la classe

Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à 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!

Déclaration:
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