考虑这个具有三个构造函数的类:
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;
}
用“g++ -std=c++0x”编译。输出是:
Copy constructor with lvalue reference. Radius: 2
2
4
好的。前两种情况的正确构造函数被调用。但是对于第三种情况,即 Circle c3(Circle(4)),我希望调用第三个构造函数(具有右值引用的复制构造函数),但事实并非如此。显然,由于 c3 已正确实例化,因此调用了一些构造函数,但我不明白为什么编译器不使用显式提供的构造函数。我在这里错过了什么吗?