条件运算符中的return语句

时间:2013-03-02 06:10:47

标签: c++ c return ternary-operator conditional-operator

我有一个代码段如下:

if(a < b)
{
    x = y;
    return w;
}
/* all unrelated variables above*/
x = something;
y = something;
/*both x and y from above*/

x和y是全局变量,它们在if部分内被修改,我需要将y赋给x然后返回w,或者只是一个常量。

我需要使用三元运算符来替换if部分:

我尝试了以下内容:

return (((a < b) ? (x = y, w) : 1), (x = something, y = something));

但是,我似乎没有得到理想的结果。我知道这是错的。这是因为我使用了来自类似表达式的 return stement,即:

if(x < y)
    return (x = y);
return 1;

我写的是:

return ((x < y) ? x = y : 1);

但是,如何返回一个值,该值涉及在三元运算符中事先分配完全不同的变量?

2 个答案:

答案 0 :(得分:2)

Mankarse建议的解决方案:

return (a < b) ? (x = y, w) : (x = something, y = something, z);

实际上相当于:

if (a < b) {
    x = y;
    return w;
}
/* all unrelated variables above*/
x = something;
y = something;
return z;

第二个退货声明很重要。

你不能有条件地从表达式的中间返回,因为return是一个语句,你必须返回整个表达式。所以这实际上取决于你在分配到y之后的进展方式。或者如果你真的需要在表达式中间改变执行顺序,你可以抛出一个异常,但是,我想,在这种情况下,这会太复杂。

答案 1 :(得分:1)

将代码块放在函数中。

function f(){
x = y;//assumes x, y and w are global.
return w;
}

然后在条件语句中使用该函数。

(a < b) ? f() : "value to return if a>=b";

您不需要在条件语句之前放置return,因为自动返回值1,取决于对条件的评估。