0
我有一个模仿整数行为的类。它具有以下重载:C++如何在if(class)中选择使用哪个运算符?
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++选择这个而不是bool操作符里面的if?
干杯,
伊恩
反过来说:在指针转换上缺少** const **是个问题。这些函数都没有修改对象,所以它们都应该标记为“const”。 –
问题是非const转换为指针比const转换为bool更受欢迎,即使它正在将该类型视为布尔值。 –
是的,没错。非const的运算符被应用于非const对象,因为它是一个更好的匹配。如果所有的转换运算符都是不会发生的const。 –