關於C++ auto的理解 ?
b ? T1 : T2
務必參考:
http://en.cppreference.com/w/cpp/types/common_type?:三目運算符的返回類型必須是編譯期確定的。
因為conditional operator ? 本質上是一個函數,它的return type只能有一個。你這個例子中1.0和1的類型不一樣,編譯器只能把1轉換成更廣的double,然後調用return type為double的conditional operator。
IDE的type deduction經常不準確,具體還是得以編譯器為準。因為計算機是不知道「1」 「1.0」 是什麼東西的,而貌似三目運算符的返回類型必須是一樣的,所以編譯器做了類似於隱式類型轉換的工作。
a是因為,?:運算符會像其他運算符如+-*/一樣會提升類型,因為一個是double,一個是int,最後會把int提升成double,返回值是一個double,所以自動推斷為double。
auto只是做了一個類型推斷,a的表示式在編譯器看起來,值可能是int也可能是double,那當然取double了。
推薦閱讀: