#include <iostream>
using namespace std;
struct A
{
explicit operator bool() const
{
return true;
}
operator int()
{
return 0;
}
};
int main()
{
if (A())
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
我的期望是A()
将使用我的bool
从上下文转换为operator bool()
,因此请打印true
。
但是,输出为false
,表示调用了operator int()
。
为什么我的explicit operator bool
未按预期调用?
答案 0 :(得分:16)
由于A()
不是const
,因此选择了operator int()
。只需将const
添加到其他转换运算符即可:
#include <iostream>
using namespace std;
struct A
{
explicit operator bool() const
{
std::cout << "bool: ";
return true;
}
operator int() const
{
std::cout << "int: ";
return 0;
}
};
int main()
{
if (A())
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
Live Example打印:“bool:true”而没有const
打印“int:false”
或者,创建一个命名常量:
// operator int() without const
int main()
{
auto const a = A();
if (a)
// as before
}
打印“bool:true”的