【问题标题】:Return statement in conditional operator条件运算符中的返回语句
【发布时间】:2013-02-16 18:15:53
【问题描述】:

我有一段代码如下:

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,即:

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

我写的是:

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

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

【问题讨论】:

  • 我需要计算 x = y,然后返回 w,而不是 if,即使用 ?:
  • 如果!(a&lt;b),你想返回什么?
  • 一个变量 w,或者只是一个常数。
  • x 和 y 是全局变量,在 if 部分内部修改。
  • 第一个代码的if-free 版本是:return (a &lt; b) ? ((x = y), w) : (x = something, y = something, /*whatever you want your return value to be*/);

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


【解决方案1】:

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语句很重要。

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

【讨论】:

    【解决方案2】:

    将代码块放入函数中。

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

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

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

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

    【讨论】:

    • “你不需要把 return 放在条件语句之前,因为它会自动返回 1 个值” - 嗯?不。它不返回,它产生。这不是“从函数返回”。
    猜你喜欢
    • 2011-02-18
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2020-02-27
    • 2019-02-25
    • 2019-03-27
    相关资源
    最近更新 更多