我有一个函数Largest
,它接受三个参数a
、b
和c
。该函数旨在返回三个输入中的最大值。然而,当我编译代码时,我遇到了一个错误,指出该函数可能不会返回值。我不确定为什么会发生这个错误,因为我确实在函数中返回了一个值。
下面是我的C++代码:
#include <stdexcept>
int Largest(int a, int b, int c) {
if (a > b && a > c) {
return a;
}
else if (a < b && b > c) {
return b;
}
else if (a < c && c > b) {
return c;
}
}
任何帮助理解和解决这个错误将不胜感激。
3条答案
按热度按时间0s7z1bwu1#
考虑这样的一个案例:
使用这些参数,函数中的任何条件都不会是
true
:...所以函数将转到末尾 * 而不会 * 返回一个具有未定义行为的
int
作为结果。一个简单的修复:
或
或更通用:
ctzwtxfj2#
@TedLyngmo的答案解释了问题的来源,以及使用标准库的正确解决方案。
如果您需要自己实现逻辑(出于教育或其他原因),请添加以下答案:
Godbolt - demo
请注意,我使用
<=
而不是<
来处理某些值相同的情况。mwecs4sa3#
如果你的条件都不为真,函数不知道返回什么。您可以简单地删除第三个条件:如果a和B都没有返回,那么总是返回c。