我有一个模仿整数行为的类。它有以下重载:
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运算符干杯,
伊恩
答案 0 :(得分:0)
经过进一步调查,结果发现运算符bool上的const是问题。
编译器首选非const运算符myInt *()为运算符bool()const。
当我添加以下重载时:
operator bool() { return 0 != val; }
代码根据需要进入bool运算符。