2016-12-28 149 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