Verständnis der Conversion -Sequenz und der Rolle der Kopie ElisionC++

Programme in C++. Entwicklerforum
Anonymous
 Verständnis der Conversion -Sequenz und der Rolle der Kopie Elision

Post by Anonymous »

Ich würde gerne die Elisionsregeln der Kopie (falls dies derjenige sind, der angewendet wird) in einer Konvertierungssequenz während einer Direktinitialisierung von Objekten verstehen. überschreiben ">

Code: Select all

#include 

class To {
public:
To() { std::puts("To default constructor"); }
explicit To(int Input) : val(Input) { std::puts("To value constructor"); }
To(To&& object) : val(object.val) { std::puts("To move constructor"); }
~To() { std::puts("To destructor"); }

int val = -1;
};

class From {
public:
explicit From(int Input) : val(Input) {
std::puts("From value constructor");
}
operator To() const {
std::puts("From implicit conversion");
return To{val};
};
~From() { std::puts("From destructor"); }

int val = -1;
};

int main() {
To obj0(To{42});  // 1
std::puts("--------------");
To obj1(From{42});  // 2
std::puts("--------------");
}
< /code>
Live < /p>
Zeile 1 gibt den Ausgang an: < /p>

, um Konstruktor zu bewerten 

Es scheint, dass die Kopie der Elision einnimmt: Trotz seiner Konstruktions-Nebenwirkungen ist die temporäre zu {42} 
nicht materialisiert. Ich denke, dass prValue -Semantik ("Garanted Copy Elision") gilt. Ist es richtig? Code> Objekt kann in ein zu eins konvertiert werden und in Objekt hat keine direkte Konstruktion von Objekt. Ich beobachte die folgende Ausgabe:
< Blockquote>
vom Wertkonstruktor

von implizitem Konvertieren

zu Wert < /strong> Konstruktor

Von Destruktor < /p>
< /blockquote>
Zuerst hätte ich < /p>

vom Wertkonstruktor

von implizite Konvertierung

zu Bewegung < /strong> Konstruktor

vom Destruktor < /p>
< /blockquote>
/> Aber im Lichte von Zeile 1 kann ich (vorübergehend) zugeben, dass die Kopie Elision stattfindet, um den temporären zu zu entfernen, aber warum geht die Logik nicht weiter und entfernen auch das aus Objekt . "Kurzschluss" (ich bin unklar, weil diese Regeln für mich unklar sind). Nach dieser Linie des Argumentierens, wie in der Konvertierung, kann ich das vorübergehende zu Objekt materialisiert, und wenn es sich materialisiert, sollte die garantierte Elisionselisionsregel nicht mehr gelten?
Was sind also genau die Regeln, die in Zeile 2 gelten und warum?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post