Konstruktor C ++ z referencją rvalue

Rozważmy tę klasę z trzema konstruktorami:

<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>

Skompilowany z „g ++ -std = c ++ 0x”. Dane wyjściowe to:

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

DOBRZE. Odpowiednie konstruktory dla pierwszych dwóch przypadków są wywoływane. Ale w trzecim przypadku, tj. Circle c3 (Circle (4)), spodziewałbym się, że trzeci konstruktor (konstruktor kopii z referecną rvalue) zostanie wywołany, ale tak nie jest. Oczywiście niektóre konstruktory są wywoływane, ponieważ c3 jest poprawnie utworzone, ale nie rozumiem, dlaczego kompilator nie używa jawnie udostępnionego. Czy coś mi umyka?

questionAnswers(2)

yourAnswerToTheQuestion