如果条件为假,为什么语句仍被引用?

时间:2019-03-06 01:46:44

标签: c++ visual-studio

代码如下所示,值行+ i显然为-1。但是下面的陈述仍然是正确的。问题首先是在放大功能中。

void enlarge(queue<vector<int>> &slv, vector<int> &v, int n)
{
    auto row = v.size();

    int rec = 0;
    for (int i = 0; i < row; ++i)
    {
        int value = v[i];
        rec |= 1 << value;
        //int s = (value - row);
        if (value - row + i >= 0)   
            rec |= 1 << (value - row + i);
        if (value + row - i < n)    
            rec |= 1 << (value + row - i);
    }
    vector<int> vt;
    int bitPosi = 0;
    while (bitPosi < n)
    {
        if (!(rec & 1))
        {
            v.push_back(bitPosi);
            slv.push(v);
            v.pop_back();
        }
        rec >>= 1;
        bitPosi++;
    }
}

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。发生这种情况是因为row被声明为自动变量,并且被推断为size_t。转换为int时,row失去精度。