“operator bool()const”是什么意思?
例如:
operator bool() const { return col != 0; }
col
是一个int。 operator bool() const
如何工作?
成员函数的forms
operator TypeName()
是转换操作员。 它们允许使用类types的对象,就好像它们是TypeName
types一样,当它们是时,它们将使用转换函数转换为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
转换函数,将您的类转换为true
或false
。
//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; };