C ++中变量本身的变化

时间:2019-10-05 23:23:54

标签: c++ for-loop

我有一个遍历数组的循环,试图找到哪个索引是字符串。它应该解决该值应该是多少。 我不知道为什么,但是if语句开始i变为1时,这给我的代码带来了错误。 我不太懂C ++。

for(int i = 0; i < 4; i++) {
    if(auto value = std::get_if<std::string>(&varArr[i])) {
        solvedIndex = i;

        auto value0 = std::get_if<float>(&varArr[0]);
        auto value1 = std::get_if<float>(&varArr[1]);
        auto value2 = std::get_if<float>(&varArr[2]);
        auto value3 = std::get_if<float>(&varArr[3]);

        //i changes to 1 when this if starts??
        if(i = 0) {
            solvedVar = (*value3 / *value1) * *value2;
        } else if (i = 1) {
            solvedVar = *value3 / (*value0 / *value2);
        } else if (i = 2) {
            solvedVar = *value0 / (*value3 / *value1);
        } else {
            solvedVar = *value1 * (*value0 / *value2);
        }
        break;
    }
}

请注意,这些变量已在上面声明。另外,varArr填充有值:

std::variant<std::string, float> varArr[4];
int solvedIndex;
float solvedVar;

2 个答案:

答案 0 :(得分:2)

这是因为operator=是C ++(实际上是大多数语言)的赋值运算符。这会将变量的值更改为另一侧的值。因此,例如:

x = 0

会将x的值更改为0。如果在if语句中,则无关紧要。它将始终将值更改为0(或任何右侧值)。

您要寻找的是operator==,它是C ++ /中的比较(也称为关系)运算符,它会问“这两个条件是否相等?”的问题。因此,例如:

x == 0

要求x等于0。

答案 1 :(得分:2)

如前所述,在您的if语句中,您正在使用赋值运算符(=),但需要相等比较运算符(==)。对于变量i,第一个if语句集i等于0,而if(0)if(false)相同。因此,程序进入第一个else –如果将i设置为1并且if(1)的值为true。然后,您的代码将完成else if (i = 1) {...}中的代码块,然后结束。