7 ответов:
функции-члены формы
operator TypeName()операторы преобразования. Они позволяют использовать объекты типа класса, как если бы они были типа
TypeNameи когда они есть, они преобразуются вTypeNameС помощью функции преобразования.в данном случае
operator bool()позволяет использовать объект типа класса, как если бы он былbool. Например, если у вас есть объект типа класса с именемobj, вы можете использовать его какif (obj)этой
operator bool(), вернуть результат, и использовать результат в качестве условияif.следует отметить, что
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путем вызова этого метода.
как говорили другие, это для преобразования типа, в данном случае в
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; };
Comments