C 如何选择要在(类)中使用的操作员

How does C++ select which operator to use in if (class)?

本文关键字:操作员 何选择 选择      更新时间:2023-10-16

我有一个模拟整数行为的类。它具有以下超载:

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?

中选择此而不是布尔操作员

欢呼,

ian

随着进一步的研究,事实证明操作员布尔的常量是问题。

编译器更喜欢非const运算符Myint *((而不是操作员bool((const。

当我添加以下过载时:

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

代码根据需要进入布尔操作员。