你能帮我重新整理这段代码吗?cLion提出了对第一个荣誉的警告,如果Clang:在条件链中重复分支,我不明白为什么。我试着比较两个日历日期,以稍后设置最大日期和最小日期。(d-天,m-山和y-年)。
if (d1.y < d2.y) {
return -1;
} else if (d1.y == d2.y && d1.m < d2.m) {
return -1;
} else if (d1.y == d2.y) {
if (d1.m == d2.m) {
if (d1.d < d2.d) {
return -1;
}
}
} else {
return 1;
}
return 0;发布于 2022-04-09 19:21:16
编写这段代码有很多种方法。这里有一个试图清楚地显示比较的方法:
// If years differ, return comparison based on that.
if (d1.y < d2.y)
return -1;
else if (d1.y > d2.y)
return +1;
// Otherwise, if months differ, return comparison based on that.
else if (d1.m < d2.m)
return -1;
else if (d1.m > d2.m)
return +1;
// Otherwise, if days differ, return comparison based on that.
else if (d1.d < d2.d)
return -1;
else if (d1.d > d2.d)
return +1;
// Otherwise, all components are equal, so return equality.
else
return 0;发布于 2022-04-09 19:39:36
如果我不得不猜测,您的y和y对象就是“日期”。因此,成员,y (年份),m (月)和d (日)。您的比较逻辑似乎测试d1是否比d2晚。我猜是一种类似qsort的例行公事。
因此,快速转换为整数可能会更干净。
long date1 = (d1.y << 16) | (d1.m << 8) | (d1.d);
long date2 = (d2.y << 16) | (d2.m << 8) | (d2.d);然后你可以像这样测试:
if (date1 == date2) return 0;
if (date1 > date2) return 1;
return -1;但等着吧..。您甚至可以通过返回一个混合代数和布尔语句来避免这样的if语句:
return (date1 > date2)*1 + (date1 < date2) * (-1);但是,如果这是一个类似于q排序的比较函数,您可以为d1>d2返回大于0的任何内容,对于d1<d2返回小于零的任何内容,那么您可以简单地这样说:
return date1-date2;https://stackoverflow.com/questions/71808270
复制相似问题