c++ - 我认为我的编译器版本是有问题的?(在 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 - My function that returns first and last index of a chosen real number in an array executes but doesn't always work
- cloud - 如何在 Openstack 主机上运行的 Ubuntu 16 VM 上配置网络?
- postgresql - Postgresql 触发器函数
- antlr - ANTLR 语法中 [\p{Lu}] 的含义
- python - 在同一项目中从 App Engine 连接到 Google Cloud SQL Server - 登录超时
- python - 迭代参数分布
- java - 自定义标头参数 - Spring Boot
- python - 将熊猫数据框中的字符串转换为整数
- notifications - Keycloak FTL:如何访问会话已结束或用户在自定义主题的登录模板中注销的模板变量
- jenkins - 作业 dsl 中 curl 的凭据问题