“operator bool()const”是什么意思?

例如:

operator bool() const { return col != 0; } 

col是一个int。 operator bool() const如何工作?

7 Solutions collect form web for ““operator bool()const”是什么意思?”

成员函数的forms

 operator TypeName() 

是转换操作员。 它们允许使用类types的对象,就好像它们是TypeNametypes一样,当它们是时,它们将使用转换函数转换为TypeName

在这种特殊情况下, operator bool()允许使用类types的对象,就像它是一个bool 。 例如,如果您有一个名为obj的类types的obj ,则可以将其用作

 if (obj) 

这将调用operator bool() ,返回结果,并将结果用作if的条件。

应该注意的是, operator bool()是一个非常糟糕的想法,你真的不应该使用它。 有关详细的解释,为什么它是不好的,并解决这个问题,请参阅“安全布尔成语”。

(C ++ 0x,即将发布的C ++标准修订版,增加了对显式转换操作符的支持,这将允许你编写一个安全的explicit operator bool() ,它能够正常工作,而不必跳过实现安全布尔成语。)

 operator bool() const { return col != 0; } 

定义如何将类转换为布尔值,在()之后的const用于指示此方法不会改变(更改此类的成员)。

你通常会使用这样的操作符如下:

 airplaysdk sdkInstance; if (sdkInstance) { std::cout << "Instance is active" << std::endl; } else { std::cout << "Instance is in-active error!" << std::endl; } 

我想给更多的代码来说清楚。

 struct A { operator bool() const { return true; } }; struct B { explicit operator bool() const { return true; } }; int main() { A a1; if (a1) cout << "true" << endl; // OK: A::operator bool() bool na1 = a1; // OK: copy-initialization selects A::operator bool() bool na2 = static_cast<bool>(a1); // OK: static_cast performs direct-initialization B b1; if (b1) cout << "true" << endl; // OK: B::operator bool() // bool nb1 = b1; // error: copy-initialization does not consider B::operator bool() bool nb2 = static_cast<bool>(b1); // OK: static_cast performs direct-initialization } 

它是用户定义的implicit转换函数,将您的类转换为truefalse

 //usage bool value = yourclassinstance; //yourclassinstance is converted into bool! 

这是一个隐式转换为bool 。 也就是说,只要允许隐式转换,就可以通过调用该方法将类转换为bool

正如其他人所说,这是为了types转换,在这种情况下,一个bool 。 例如:

 class A { bool isItSafe; public: operator bool() const { return isItSafe; } ... }; 

现在我可以使用这个类的对象,就像它是一个布尔值:

 A a; ... if (a) { .... } 

另一个常见用途是std容器对自定义对象中的键值进行相等比较

 class Foo { public: int val; }; class Comparer { public: bool operator () (Foo& a, Foo&b) const { return a.val == b.val; }; class Blah { std::set< Foo, Comparer > _mySet; }; 
  • 隐式类应该总是扩展AnyVal?
  • 是否保证新的Integer(i)==我在Java?
  • 我们可以在c#中定义枚举的隐式转换吗?
  • 静态隐式运算符
  • “is_base_of”如何工作?
  • MySQL的date时间比较
  • Scala在哪里寻找隐含的东西?
  • 多重隐式转换的交集:重新发明轮子?