C++:当用作逻辑值时如何返回对象的设置状态

Swi*_*ank 2 c++ oop operator-overloading c++11

我有一些可以设置或不设置的类:

Class obj;
Run Code Online (Sandbox Code Playgroud)

我希望它的值在逻辑中使用时返回是否已设置:

if ( obj )
    obj.Clear();

if ( !obj )
    obj.Set( "foo" );
Run Code Online (Sandbox Code Playgroud)

我想添加到 bool 的隐式转换,但我想知道 int 是否是必要的,或者是否有更好的方法来解决这个问题。

asm*_*mmo 5

可以定义一个bool操作符,如下

#include <iostream>

struct Object{
    bool state;
    explicit operator bool()const{
        return state;
    }
};
int main(){

    Object o1;
    Object o2;
    o1.state = false;
    o2.state = true;
    std::cout << "\no1 state is " << (o1?  "true": "false");
    std::cout << "\no2 state is " << (!o2?  "false": "true");
}
Run Code Online (Sandbox Code Playgroud)

输出是

o1 state is false
o2 state is true
Run Code Online (Sandbox Code Playgroud)

居住

  • `operator bool` 应该是 `explicit`!否则你会得到奇怪的隐式转换,例如“o1 + 42”将编译。 (2认同)