c++ - 检查 union 平等

标签 c++ equality unions

struct Something {
    union {
        float k;
        int n;
    };

    bool isFloat;

    bool operator==(const Something& mS)
    {
        if(isFloat != mS.isFloat) return false;
        if(isFloat && mS.k == k) return true;
        if(!isFloat && mS.n == n) return true;
    }
};

我对 Something::operator== 的实现似乎相当昂贵且令人费解。这是检查具有 union 类型的类是否相等的唯一方法吗?

或者是否有更好的方法来避免分支/检查额外的变量?

最佳答案

bool operator==(const Something& mS)
{
    if (isFloat != mS.isFloat)
    {
        return false;
    }
    else if (isFloat)
    {
        return mS.k == k;
    }
    else
    {
        return mS.n == n;
    }
}

清晰且可调试,检查次数最少。您希望有一个构造函数和/或设置方法来确保 isFloat 始终正确。

关于c++ - 检查 union 平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096103/

相关文章:

c++ - 可移植比较和交换(原子操作)C/C++ 库?

c - 为什么我不能在 C 中仅使用 1 个相等运算符来检查多个条件?

python - 什么时候用==,什么时候用is?

关于C中union的代码片段问题

c++ - 如何使用ffmpeg实现像get_next_frame一样的功能?

c++ - 基于for循环访问范围内的指针

c++ - 从标准输入读取数组,忽略括号和逗号

javascript - 为什么 JavaScript 中 1 == '1\n' 为 true?

C++ union 成员未初始化

typescript - 在 typescript 中将字典/对象键作为元组获取