繁体   English   中英

三元运算符的编译错误

[英]compilation error with ternary operator

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

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

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

第1行编译,但是第2行不编译。 为什么呢

在第3个操作数而不是第2个操作数的情况下,括号有何不同? 我不必在第二/第三操作数中使用括号与其他任何内容(一元,字符串,基本算术...)为什么只使用赋值运算符,而又太具体地使用第三操作数呢?

提前致谢 !

如果在x*=10周围没有() ,则*=运算符的整个左侧操作数为false ? y+=1 : x false ? y+=1 : x ,就好像您有:

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

false ? y+=1 : x false ? y+=1 : x不是变量,不能是*=的左操作数。

优先级列表中 ,条件运算符( ? : :)下的赋值运算符(包括复合赋值, *=等)非常低:

运算符优先

  • 后缀: expr ++ expr --
  • 一元: ++ expr -- expr + expr - expr ~ !
  • 乘法: * / %
  • 加成物: + -
  • 班次: << >> >>>
  • 关系: < > <= >= instanceof
  • 平等: == !=
  • 按位:AND &
  • 按位:异或^
  • 按位:包含或|
  • 逻辑:AND &&
  • 逻辑:OR ||
  • 三元: ? : ? :
  • 分配: = += -= *= /= %= &= ^= |= <<= >>= >>>=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM