[問題] auto用在const變數以及字面值

作者: RealJack   2015-01-12 13:17:31
各位好,
在C++11的新標準auto可用來自動推斷變數的type
請看以下範例:
const int ci=1;
auto &g=ci; //g的type為const int&
const auto &h=2; //要自行加上const
我的疑問是為何第二行編譯器會幫我們自動推斷出const
第三行卻一定要自行加上const
是有什們原因嗎?
作者: ACMANIAC (請肥宅救救肥宅)   2015-01-12 13:56:00
假設會自動加上 const,那你要怎麼寫沒有 const 的變數?第二個能自動推斷,是因為它 ref 的對象是個變數名稱,所以 g 就是個別名 (alias) 而已。
作者: RealJack   2015-01-12 14:08:00
可是第二行不加const會error,編譯器為何不順便加上?你講的情況應該是非引用, auto i=ci; const auto j=ci;此時i和j都是top level const,可忽略初始值的const屬性所以可自行決定是否要加const應該是說h算是引用還是變數呢? h看起來不像別名
作者: bibo9901 (function(){})()   2015-01-12 16:03:00
temporary 只能用 const reference不然 2 很可能跟本不在記憶體裡面, 如何參考?
作者: RealJack   2015-01-12 16:37:00
回樓上,編譯器為何不幫忙加const? 第二行卻自動加?
作者: uranusjr (←這人是超級笨蛋)   2015-01-12 22:18:00
看了半天還是不懂你的問題在哪裡, 如果編譯器會自動加,當你真的想要 h 是 int & 時要怎麼寫?唔, 好像懂了, 你的意思是為什麼編譯器沒有幫常數做特例這大概只能說因為沒有規定他要幫你這麼做吧
作者: RealJack   2015-01-12 23:43:00
樓上,第3行是非加const不可,為何編譯器不順便加?第二行也是非加const不可,這時編譯器就自動幫忙加const為我是好奇為何會有差別待遇
作者: firose (guest也是也是也是也是也)   2015-01-13 00:06:00
可能是左值、右值的關係?右值要明確寫?感覺應該要自動推 @@應該左值不給推,要 auto&& 才抓得到,auto& 就比照 T&  右
作者: carylorrk (carylorrk)   2015-01-14 05:45:00
2 是 int 不是 const int。that's all.

Links booklink

Contact Us: admin [ a t ] ucptt.com