2016-12-28 79 views
2

我尝试了下面的三元运算符,我不明白它为什么不编译。这个问题似乎很小,但我不明白,因此困扰我 -三元运算符编译错误

行1 - > int a = false? y + = 1:(x * = 10);

第2行 - > int b = false? y + = 1:x * = 10;

1行编译行2没有。为什么?

括号在第三个操作数而不是第二个操作数的情况下有什么区别。我不必在第二/第三操作数中使用括号(一元,字符串,基本算术......)为什么只是赋值操作符和那个特定的第三操作数?

在此先感谢!

回答

6

没有()周围x*=10*=运营商的整个左侧操作数是false ? y+=1 : x,仿佛你有:

int b = (false ? y+=1 : x)*=10; 

而作为false ? y+=1 : x不是一个变量,它不能是*=的左侧操作数。

赋值运算符(包括化合物分配,*=和例如)非常,在precedence list很低,条件运算符(? :)所示:

算优先

  • 后缀:expr++ expr--
  • 一元:++expr --expr +expr -expr ~ !
  • 乘法:*/%
  • 添加剂:+ -
  • 转变:<< >> >>>
  • 关系:< > <= >= instanceof
  • 平等:== !=
  • 按位:AND &
  • 按位:异或^
  • 按位:包容OR |
  • 逻辑:AND &&
  • 逻辑:或||
  • 三元:? :
  • 分配:= += -= *= /= %= &= ^= |= <<= >>= >>>=
+1

这能帮助,谢谢! – Rads