C ++如何选择在if(class)中使用哪个运算符?

时间:2017-04-19 12:18:27

标签: c++ class if-statement boolean operator-overloading

我有一个模仿整数行为的类。它有以下重载:

class myInt
{
    ...
    operator int() const { return val; }
    operator bool() const { return 0 != val; }
    operator myInt *() { assert(0); return NULL; } // Cast to pointer not supported
    ...
private:
    int val;
}

当我按如下方式使用时:

myInt i = 0;
if (i) ...

它在指针转换中击中断言。

为什么C ++会在if?

中选择此而不是bool运算符

干杯,

伊恩

1 个答案:

答案 0 :(得分:0)

经过进一步调查,结果发现运算符bool上的const是问题。

编译器首选非const运算符myInt *()为运算符bool()const。

当我添加以下重载时:

operator bool() { return 0 != val; }

代码根据需要进入bool运算符。