如何使用struct作为条件的操作数?

Pet*_*mit 5 c++ conditional struct operator-overloading c++11

我在C++ 11中有一个简单的结构

struct a {
    int a;
    int b;
    int c;
    ....
}
Run Code Online (Sandbox Code Playgroud)

我想使用这个结构,好像它本身就是一个标量类型,所以我重载了所有运算符.

我找不到如何定义的一个行为是在if语句中使用struct:

a v = {1,2,3};
if (v) { }
Run Code Online (Sandbox Code Playgroud)

是否有一个运算符,我可以重载以启用此行为?我想要标准行为:如果结构中的任何位为1则为真,否则为假.

Ker*_* SB 16

添加显式布尔转换:

struct a
{
    explicit operator bool() const
    {
        return a || b || c;
    }

    int a;
    int b;
    int c;
    // ...
};
Run Code Online (Sandbox Code Playgroud)

  • @AntonSavin恰恰相反,*应该*明确.`if()`执行"上下文转换为`bool`",它可以调用显式运算符.除非你真的需要,否则不要隐含东西. (10认同)