是否可以改变if()的行为:
class Foo { int x; }; Foo foo; if(foo)
只有当x的值不是零时,才能进行?要么…
一个明确的用户定义的类型转换为int工作/这将是一个适当的方法?要么…
最好做如if(foo.getX())吗?
解决方法
您可以通过定义运算符bool()将对象转换为布尔值:
explicit operator bool() const { return foo.getX(); }
explicit关键字可以防止从Foo到bool的隐式转换.例如,如果您不小心将foo放在像foo 1这样的算术表达式中,如果您将操作符bool()声明为显式,则编译器可能会检测到此错误,否则,即使不打算,foo也将转换为bool.
一般来说,表单的成员函数
operator TypeName()
(具有可选的显式和常量限定符)是转换操作符.它允许您将类转换为TypeName指定的任何类型.在另一个方向,使用一个参数的构造函数可以将任何类型转换为类:
class Foo { Foo(int x); // convert int to Foo operator bool() const; // convert Foo to bool int x; };
这定义了您的类的隐式转换.如果可能,编译器会尝试应用这些转换(就像内置数据类型所做的那样,例如5 1.0).您可以声明它们是明确的,以抑制不必要的隐式转换.