C++ 没有正确使用运算符“?”?

C++ 没有正确使用运算符“?”?,c++,return,operator-keyword,C++,Return,Operator Keyword,我得到了一个返回一个整数的函数,以及它的一些最大值和最小值。我想在最后用一个干净漂亮的衬里: (freq>max_freq) ? return max_freq : ((freq<min_freq) ? return min_freq : return freq); 但我得到的是 posplot.hh:238:21: error: expected primary-expression before ‘return’ (freq>max_freq) ? return

我得到了一个返回一个整数的函数,以及它的一些最大值和最小值。我想在最后用一个干净漂亮的衬里:

(freq>max_freq) ? return max_freq : ((freq<min_freq) ? return min_freq : return freq);
但我得到的是

posplot.hh:238:21: error: expected primary-expression before ‘return’
     (freq>max_freq) ? return max_freq : ((freq<min_freq) ? return min_freq : return freq);}
                     ^
posplot.hh:238:21: error: expected ‘:’ before ‘return’
posplot.hh:238:21: error: expected primary-expression before ‘return’
posplot.hh:238:21: error: expected ‘;’ before ‘return’

那么,这是因为在这里使用return是一件愚蠢的事情,我应该用其他方法来实现它,还是它可以工作,但我搞砸了?我很好奇,因为我想我用了“?”操作符作为很多东西的更整洁的if-else,它总是工作得很好。有人能解释为什么会这样吗

您需要在三元运算符之前移动返回:

return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);

基本上,三元运算符在每个分支上的计算结果都是一个值,这意味着它需要3个表达式,并且您正在创建一个表达式和两个语句,因为return创建了一个语句。

?运算符可用于表达式中。return是一个语句

您的一行代码可能如下所示:

return (freq>max_freq ? max_freq : (freq<min_freq ? min_freq : freq));

与大多数其他运算符一样,条件运算符的操作数必须是表达式而不是语句,因此它们不能是返回语句

条件表达式本身有一个值:所选操作数的值。评估并返回:

return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);

?的操作数:必须是表达式。返回一些表达式;是语句,返回的someExpression不带分号无效。我建议使用std::max和std::min来代替。非常感谢您提供更详细的解释,我真的应该尝试一下,它甚至比我的线路看起来更符合逻辑。