C’重载’if()语句

前端之家收集整理的这篇文章主要介绍了C’重载’if()语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以改变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).您可以声明它们是明确的,以抑制不必要的隐式转换.

猜你在找的C&C++相关文章