代码之家  ›  专栏  ›  技术社区  ›  jose

C条件语句

  •  0
  • jose  · 技术社区  · 16 年前

    我想切换以下项的值。如果这是真的,我想跟在后面=假,反之亦然。

    而不是我正在使用的“if”语句?:

            isFollowing == true ? isFollowing = false : isFollowing = true;
    

    但这不起作用。它给出“只有赋值、调用、递增、递减和新对象表达式可以用作语句” 为什么会这样?

    提前谢谢

    4 回复  |  直到 16 年前
        1
  •  16
  •   Crast    16 年前

    如果你想把它保留为三元,你可以这样做。

    isFollowing = (isFollowing == true ? false : true);
    

    然而,这是一个更短的等价物:

    isFollowing = !isFollowing;
    

    代码不起作用的原因是三元本身就是一个表达式,并非所有表达式都是有效的语句。通过将它转换为三元值的赋值,它就变成了一个语句。

    您的代码很可能在C中有效,只要它满足运算符优先规则,但C不允许您这样做。作为一种实践,最好将三元分支限制在没有任何副作用,即使语言允许你这样做。

        2
  •  10
  •   jason    16 年前

    用途:

    isFollowing = !isFollowing;
    

    要使用三元运算符进行此操作,请执行以下操作:

    isFollowing = isFollowing ? false : true;
    

    但不要这样做,只需使用第一个版本。

    你所拥有的不起作用的原因是因为三元运算符的形式是

    conditon ? expression_if_condition_is_true : expression_if_condition_is_false;
    

    它的计算结果是一个表达式( expression_if_condition_is_true 如果 condition true expression_if_condition_is_false 如果 条件 false )表达式不能用作语句,除非它们是方法调用、增量(即, i++ ,减量,分配使用 new 和任务。

        3
  •  1
  •   Sam Doshi    16 年前

    当然,更简单的方法是:

    isFollowing = !isFollowing;
    

    否则使用?:

    isFollowing = isFollowing ? false : true;
    
        4
  •  1
  •   Lasse V. Karlsen    16 年前

    出现错误的原因是在表达式的中间有一个赋值:

    isFollowing == true ? isFollowing = false : isFollowing = true;
                                      ^
                                    here
    

    三元运算符是表达式,不能单独使用这种类型的表达式,需要将其赋给某个对象。

    这里的其他答案为您提供了如何重写它的解决方案:

    isFollowing = !isFollowing;