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;
    }
}

以最少的检查次数清除和调试。您希望有一个构造函数和/或 set 方法来确保 isFloat 始终正确。

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

10-13 08:11