C ++ - Konstruktor mit R-Wert-Referenz

Betrachten Sie diese Klasse mit drei Konstruktoren:

<code>class Circle {

public:
 Circle(int r) {
      _radius = r;
 }

Circle(const Circle& c){
    _radius = c.radius();
    cout << endl << "Copy constructor with lvalue reference. Radius: " << _radius;
}

Circle(Circle&& c){
    _radius = c.radius();
    cout << endl << "Copy constructor with rvalue reference. Radius:" << _radius;
}

int radius() const {
    return _radius;
}

private:
    int _radius;
};

int main() {
     Circle c1(2);
     Circle c2(c1);
     cout << endl << c2.radius(); 
     Circle c3(Circle(4));
     cout << endl << c3.radius(); 
     return 0;
 }
</code>

Kompiliert mit "g ++ -std = c ++ 0x". Die Ausgabe ist:

<code>Copy constructor with lvalue reference. Radius: 2
2
4
</code>

OK. Die richtigen Konstruktoren für die ersten beiden Fälle werden aufgerufen. Aber für den dritten Fall, d. H. Circle c3 (Circle (4)), würde ich erwarten, dass der dritte Konstruktor (Copy-Konstruktor mit rvalue referecne) aufgerufen wird, aber das ist nicht der Fall. Offensichtlich wird ein Konstruktor aufgerufen, da c3 ordnungsgemäß instanziiert ist, aber ich verstehe nicht, warum der Compiler den explizit bereitgestellten nicht verwendet. Vermisse ich hier etwas?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage