加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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).您可以声明它们是明确的,以抑制不必要的隐式转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读