【问题标题】:What does the line "h = b = out" mean in C [duplicate]C中的“h = b = out”行是什么意思[重复]
【发布时间】:2021-02-21 11:56:14
【问题描述】:
 h = b = out;

 /* h is the number of code points that have been handled, b is the  */
 /* number of basic code points, and out is the number of ASCII code */
 /* points that have been output.                                    */

我无法弄清楚这条线是否只是将hb 设置为等于out 的一种奇怪方式,或者它是否是一个布尔表达式将h 设置为等于true (0 ?) 如果b 已经等于out

【问题讨论】:

  • 建议的副本都没有解决布尔解释的部分。
  • @Yunnosch 解释正确的含义意味着它没有一些不同的含义,例如布尔表达式

标签: c variable-assignment assignment-operator boolean-operations


【解决方案1】:

= 是 C 中的 always 赋值运算符,不能用于比较 2 个值。要获得“布尔”表达式,您必须使用==。表达式 a = b 将 b 分配给 a 并返回分配的值,该值可用于另一个表达式。所以h = b = out; 实际上将out 分配给bh。它被解析为h = (b = out),因为在C 中= 运算符是left associative

Assignment 还返回与lhs 中存储的值相同的值(因此a = b = c 等表达式是可能的)。赋值运算符的value category 是非左值(因此(a=b)=c 等表达式无效)。

https://en.cppreference.com/w/c/language/operator_assignment

【讨论】:

    【解决方案2】:

    h = b = 出; 在 C 中,这意味着将 h 和 b 都设置为 out。 h = ( b = out );表示布尔表达式。

    【讨论】:

    • 这不是布尔表达式
    • 输入错误。 h = ( b == out)
    • OP 询问的是h = b = out,而不是h = b == out
    【解决方案3】:

    它不能是布尔值,因为那会使用== 而不是=
    所以是的,这是一种设置两个变量的(奇怪的)方式,基于b=out 的值是out 的事实。

    【讨论】:

      【解决方案4】:

      它将 h 和 b 设置为 out。 布尔值将是 h ? b : out; 并且意味着如果 h 为真则 b 否则为 - 所以它没有设置任何 h

      【讨论】:

      • 不,这不是布尔表达式。如果它是h = b == out,它只会是一个布尔表达式。 === 运算符非常不同
      • @phuclv 我知道这不是布尔表达式。这就是为什么我写“布尔值将是”......
      • 我明白了你的意思。该措辞很容易让人认为它的意思是“等效的布尔表达式将是”。不,这就是 OP 正在考虑的问题。他认为这类似于h = b == out,这是一个布尔表达式。没有人会认为h = b = outh ? b : out
      猜你喜欢
      • 2010-09-22
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2014-12-21
      • 2017-02-17
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多