#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()从上下文转换为bool,因此打印为true.
为什么我的显式运算符bool未按预期调用?
解决方法
因为A()不是const,所以选择了运算符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 }
Live Example打印“bool:true”.