C’重载’if()语句
发布时间:2020-12-16 05:44:11 所属栏目:百科 来源:网络整理
导读:是否可以改变if()的行为: class Foo { int x;};Foo foo;if(foo) 只有当x的值不是零时,才能进行?要么… 一个明确的用户定义的类型转换为int工作/这将是一个适当的方法?要么… 最好做如if(foo.getX())吗? 解决方法 您可以通过定义运算符bool()将对象转换为
是否可以改变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).您可以声明它们是明确的,以抑制不必要的隐式转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |