Constructor C ++ con referencia rvalue.

Considera esta clase con tres constructores:

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

Compilado con "g ++ -std = c ++ 0x". La salida es:

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

DE ACUERDO. Se llaman los constructores adecuados para los dos primeros casos. Pero para el tercer caso, es decir, Círculo c3 (Círculo (4)), esperaría que se llamara al tercer constructor, (constructor de copia con valor de referencia) pero no es el caso. Obviamente, se llama a algún constructor ya que c3 está correctamente instanciado, pero no entiendo por qué el compilador no está utilizando el proporcionado explícitamente. ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta