簡體   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