不使用运算符“?”适当地?
Not using operator '?' properly?
所以我有函数 returning 一个整数以及它的一些最大值和最小值。我想在最后用漂亮干净的单线来做:
(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 是一件愚蠢的事情,我应该用其他方式来做,或者它可以工作但我搞砸了?我很好奇,因为我想我用过“?”运算符对于很多东西来说更整洁,而且它总是工作得很好。有人可以解释为什么会这样吗?
您需要将 return 移到三元运算符之前:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);
基本上,三元运算符应该在每个分支上计算出一个值(这意味着它需要 3 个 表达式 ,并且您正在创建一个表达式和两个statements,因为 return
创建了一个语句)。
?运算符可以用在表达式中。 return 是一个语句
你的单线可能是这样的:
return (freq>max_freq ? max_freq : (freq<min_freq ? min_freq : freq));
条件运算符(与大多数其他运算符一样)的操作数必须是表达式而不是语句,因此它们不能是return-语句。
条件表达式本身有一个值:所选操作数的值。评估它,然后 return 它:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);
所以我有函数 returning 一个整数以及它的一些最大值和最小值。我想在最后用漂亮干净的单线来做:
(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 是一件愚蠢的事情,我应该用其他方式来做,或者它可以工作但我搞砸了?我很好奇,因为我想我用过“?”运算符对于很多东西来说更整洁,而且它总是工作得很好。有人可以解释为什么会这样吗?
您需要将 return 移到三元运算符之前:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);
基本上,三元运算符应该在每个分支上计算出一个值(这意味着它需要 3 个 表达式 ,并且您正在创建一个表达式和两个statements,因为 return
创建了一个语句)。
?运算符可以用在表达式中。 return 是一个语句
你的单线可能是这样的:
return (freq>max_freq ? max_freq : (freq<min_freq ? min_freq : freq));
条件运算符(与大多数其他运算符一样)的操作数必须是表达式而不是语句,因此它们不能是return-语句。
条件表达式本身有一个值:所选操作数的值。评估它,然后 return 它:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);