不使用运算符'?'正常吗?

时间:2015-02-03 20:02:42

标签: 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 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’

所以,是因为在这里使用返回是一件愚蠢的事情,我应该采取其他方式或者它可以工作,但我搞砸了?我很好奇,因为我觉得我用过'?'操作员作为更整洁的if-else用于很多东西,它总是工作正常。有人能解释为什么会这样吗?

3 个答案:

答案 0 :(得分:6)

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

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

基本上,三元运算符应该在每个分支上评估为单个值(这意味着它需要是3个表达式,并且您要创建一个表达式和两个语句,因为return创建了一个语句。)

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

?运算符可以在表达式中使用。 return是一个声明

你的单行可能看起来像这样:

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