我有一个包装类,应该像指针一样运作。我重载了
operator T*
和operator bool
。Bool执行了一些额外的验证。
我试着在if里使用这个对象,但我注意到被调用的是operator T*
而不是bool
。有人能解释一下为什么吗?这是否在标准中有明确定义?我在MSVC、clang和gcc中测试了下面的示例代码,它们都调用了operator T*
。
此外,从我在这个页面上读到的(https://en.cppreference.com/w/cpp/language/implicit_conversion),if应该尝试转换为bool
。#include <stdio.h>
class MyClass
{
public:
MyClass(int i)
: m(i)
{}
operator bool() const
{
printf("operator bool()\n");
return m;
}
operator int* ()
{
printf("operator int* ()\n");
return &m;
}
private:
int m;
};
int main()
{
MyClass a(5);
MyClass b(0);
if (a)
printf("a is true\n");
else
printf("a is false\n");
if (b)
printf("b is true\n");
else
printf("b is false\n");
return 0;
}
PS: 我还尝试过使用 !!
和 (bool)
,但它仍然调用了 operator int*()
。 对于 operator bool()
,我必须显式地调用它。