在foo类中,我编写了将隐式转换运算符转换为double和将显式转换运算符转换为int的函数,并编写了一个以int作为参数的函数。尽管使用未转换的foo对象调用该函数,但代码仍会执行。
我使用了gcc PRETTY_FUNCTION并发现foo对象被转换为double,然后再转换为int。
class foo
{
public:
int x, y;
foo(int x, int y) : x{x}, y{y} {}
explicit operator int() {cout << __PRETTY_FUNCTION__ << "\n"; return x/y;}
operator double() {cout << __PRETTY_FUNCTION__ << "\n"; return double(x)/double(y);}
};
void printint(int x)
{
cout << x << "\n";
}
int main()
{
foo var(1,2);
printint(var);
}
我原以为这段代码不能编译通过,因为它有一个显式转换运算符,但事实上它可以编译通过并输出0作为int(1/2)的值。
程序的输出结果如下: foo::operator double() 0