是否有可能改变if()
以便:
class Foo {
int x;
};
Foo foo;
if(foo)
仅当价值x
是不是零的东西?或者...
到 int 的显式用户定义类型转换是否有效/这是一种合适的方法吗?或者...
最好做类似的事情if(foo.getX())
?
您可以通过定义将对象转换为布尔值operator bool()
:
explicit operator bool() const
{
return foo.getX();
}
The explicit
关键字可防止隐式转换Foo
to bool
。例如,如果你不小心把foo
在像这样的算术表达式中foo + 1
,如果您声明,编译器可以检测到此错误operator bool()
as explicit
, 否则foo
将被转换为bool
即使不是故意的。
一般来说,形式的成员函数
operator TypeName()
(带有可选的explicit
and const
限定符)是转换运算符。它允许您将类转换为由指定的任何类型TypeName
。另一方面,带有一个参数的构造函数允许您将任何类型转换为您的类:
class Foo {
Foo(int x); // convert int to Foo
operator bool() const; // convert Foo to bool
int x;
};
这定义了您的类的隐式转换。如果可能的话,编译器会尝试应用这些转换(就像它对内置数据类型所做的那样,例如5 + 1.0
)。您可以将它们声明为explicit
抑制不需要的隐式转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)