首页 > 解决方案 > 我认为我的编译器版本是有问题的?(在 if 语句中检测到 1 && 0)

问题描述

#include <iostream>
#include <vector>

bool contains(std::vector<int> list, int value){
    for(unsigned int i=0; i<list.size(); i++){
        if(list[i] == value) return 1;
    }
    return 0;
}

bool containsdouble(std::vector<double> list, double value){
    for(unsigned int i=0; i<list.size(); i++){
        if(list[i] == value) return 1;
    }
    return 0;
}

int main(){
    std::vector<int> step = {0};
    std::vector<double> value = {};
    value.push_back(double(4)/double(3));
    int i = 4;
    int j = 3;
    while(1){
        if(contains(step, (0)) && !containsdouble(value, double(i)/double(j))){
            std::cout << contains(step, (0)) << " && " << !containsdouble(value, double(i)/double(j)) << " caught on\ni = " << i << ", j = " << j;
            return 0;
        }
        i*=2; j*=2;
    }
    return 0;
}

这是结果

这仅在 -O2 或 -O3 时出现,并且仅出现在某些版本的编译器中,而不是所有版本的编译器中。这个结果是用 MinGW 编译器完成的,但同样它只出现在某些版本的编译器中。

所以要做的是检查 0 是否在步中,它是,如果不是 4.0/3.0 是在值中,它不是。1 && 0。然后它无论如何都会进入 if 语句并给出结果。

标签: c++g++mingwmingw32

解决方案


推荐阅读