Heim  >  Artikel  >  Backend-Entwicklung  >  Welche C++-Operatoren können nicht überladen werden?

Welche C++-Operatoren können nicht überladen werden?

青灯夜游
青灯夜游Original
2020-12-21 15:20:1514359Durchsuche

Die C++-Operatoren, die nicht überladen werden können, sind: 1. Bedingter Operator „?:“; 3. Domänenoperator „sizeof“;5 Zugriffsoperatoren „->*“ und „.*“.

Welche C++-Operatoren können nicht überladen werden?

Verwandte Empfehlungen: „C++-Video-Tutorial

Überladung: Erlauben Sie Operatoren, neue Semantiken zu verwenden, anstatt die Syntax zu ändern, da es sonst zu Verwirrung kommt.

Teil der Regeln zur Überladung: Mindestens ein Parameter der Operationsfunktion muss ein Objekt der Klasse oder eine Referenz auf das Objekt der Klasse sein.

Es gibt 5 Operatoren, die in C++ nicht überladen werden können:

  • "?:" (bedingter Operator)

  • "." (Mitgliedszugriffsoperator)

  • ": :" (Feld Operator)

  • „sizeof“ (Längenoperator)

  • „->*“ und „.*“ (Mitgliedszeigerzugriffsoperator)

Dann diese Operationen Warum können Symbole nicht überladen werden? Grundeinführung:

(1) “?:”“?:”

假设可以重载,那么我们来看下列的代码:

exp1 ? exp2 : exp3

该运算符的含义是执行exp2和exp3中的一个,假设重载了,就不可以保证执行一个还是两个,还是都没执行,该运算符的跳转性质就不复存在了。所以,“?:”不能被重载。

(2)“.”

假设可以重载,我们可以假设一种情况,创建一个对象,调用该对象的函数。

class Y{
   public:
      void fun();
};
class X{
   public:
      Y* p;
      Y& operator.(){
          return *p;
      }
      void fun();
}
void g(X& x){
      x.fun();
}

这个例子中,x.fun()就不知道是调用哪一个fun函数了。 
“.”运算符的含义是引用对象成员,然而被重载后就不能保证了,导致运算符意义的混淆。

(3)“::”

该运算符只是在编译的时候域解析,而没有运算参与。根据重载的规则,如果重载该运算符,就赋予了新的语义,可能会出现混淆。

(4)“sizeof”

不能被重载的原因主要是内部许多指针都依赖sizeof。

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

Angenommen, es kann überladen werden, dann schauen wir uns den folgenden Code an:

rrreee

Die Bedeutung dieses Operators besteht darin, exp2 und auszuführen exp3 Wenn einer von ihnen überladen ist, gibt es keine Garantie dafür, dass einer, zwei oder keiner von beiden ausgeführt wird und die Sprungeigenschaft des Operators nicht mehr vorhanden ist. Daher kann „?:“ nicht überladen werden.

(2) "."

🎜🎜Angenommen, es kann überlastet werden, können wir eine Situation annehmen, in der wir ein Objekt erstellen und die Funktion des Objekts aufrufen. 🎜rrreee🎜In diesem Beispiel weiß x.fun() nicht, welche Fun-Funktion aufgerufen wird.
Die Bedeutung des „.“-Operators besteht darin, auf Objektmitglieder zu verweisen. Dies ist jedoch nach einer Überladung nicht mehr gewährleistet, was zu Verwirrung über die Bedeutung des Operators führt. 🎜🎜🎜 (3) “::”🎜🎜🎜Dieser Operator wird nur zur Kompilierungszeit von der Domäne analysiert und nimmt nicht an Vorgängen teil. Gemäß den Überladungsregeln wird bei einer Überlastung des Operators eine neue Semantik gegeben und es kann zu Verwirrung kommen. 🎜🎜🎜(4) "sizeof"🎜🎜🎜Der Hauptgrund, warum es nicht überladen werden kann, ist, dass viele interne Zeiger auf sizeof basieren. 🎜🎜🎜 (5) "->*" und ".*"🎜🎜🎜Referenzhinweise für Kursteilnehmer🎜🎜Weitere programmierbezogene Kenntnisse finden Sie unter: 🎜Einführung in die Programmierung🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonWelche C++-Operatoren können nicht überladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn