【发布时间】:2020-03-03 23:01:45
【问题描述】:
我有一个包装类,它的行为应该像一个指针。我已经超载了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(),我必须明确地调用它。
【问题讨论】:
-
在链接中跳到安全布尔问题部分。
标签: c++ class operator-overloading implicit-conversion conversion-operator