返回信息流#include <iostream>
using namespace std;
class Integral;
class SmallInt {
public:
SmallInt(int i): val(i) {
cout << "int constructor" << endl;
}
SmallInt(Integral);
operator int() const {
cout << "to int" << endl;
return val;
}
private:
int val;
};
class Integral {
public:
Integral(int i = 0): val(i) {}
operator SmallInt() const {
cout << "to SmallInt" << endl;
return SmallInt(val);
}
operator int() const { return val; }
friend class SmallInt;
private:
int val;
};
SmallInt::SmallInt(Integral obj): val(obj.val) {
cout << "Integral constructor" << endl;
}
void compute(SmallInt obj) {
cout << "compute() invoked" << endl;
}
int main(int argc, char *argv[]) {
Integral int_val(45);
compute(int_val);
return 0;
}
这是按C++ primer 中文第四版460的例子写的,书上说main里那个compute函数的调用参数传递有二义性,Integral类型的对象int_val可以通过两种方式转换到SmallInt类型,即用Integral类的转换操作符或者用SmallInt类的构造函数。用gcc编译运行结果是,输出
Integral constructor
compute() invoked
即调用的是SmallInt的构造函数
删除了参数为Integral对象的那个SmallInt构造函数之后,调用的才是转换操作符……
请问这是什么原因呢?
谢谢~!
这是一条镜像帖。来源:北邮人论坛 / cpp / #19260同步于 2009/2/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】转换操作符,类类型转换
Vampire
2009/2/15镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复