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

看板C_and_CPP作者時間9年前 (2015/01/12 13:17), 編輯推噓1(1022)
留言23則, 6人參與, 最新討論串1/2 (看更多)
各位好, 在C++11的新標準auto可用來自動推斷變數的type 請看以下範例: const int ci=1; auto &g=ci; //g的type為const int& const auto &h=2; //要自行加上const 我的疑問是為何第二行編譯器會幫我們自動推斷出const 第三行卻一定要自行加上const 是有什們原因嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.243.193 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421039854.A.8EF.html

01/12 13:56, , 1F
假設會自動加上 const,那你要怎麼寫沒有 const 的變數?
01/12 13:56, 1F

01/12 13:56, , 2F
第二個能自動推斷,是因為它 ref 的對象是個變數名稱,
01/12 13:56, 2F

01/12 13:57, , 3F
所以 g 就是個別名 (alias) 而已。
01/12 13:57, 3F

01/12 14:08, , 4F
可是第二行不加const會error,編譯器為何不順便加上?
01/12 14:08, 4F

01/12 14:10, , 5F
你講的情況應該是非引用, auto i=ci; const auto j=ci;
01/12 14:10, 5F

01/12 14:12, , 6F
此時i和j都是top level const,可忽略初始值的const屬性
01/12 14:12, 6F

01/12 14:15, , 7F
所以可自行決定是否要加const
01/12 14:15, 7F

01/12 14:19, , 8F
應該是說h算是引用還是變數呢? h看起來不像別名
01/12 14:19, 8F

01/12 16:03, , 9F
temporary 只能用 const reference
01/12 16:03, 9F

01/12 16:04, , 10F
不然 2 很可能跟本不在記憶體裡面, 如何參考?
01/12 16:04, 10F

01/12 16:37, , 11F
回樓上,編譯器為何不幫忙加const? 第二行卻自動加?
01/12 16:37, 11F

01/12 22:18, , 12F
看了半天還是不懂你的問題在哪裡, 如果編譯器會自動加,
01/12 22:18, 12F

01/12 22:18, , 13F
當你真的想要 h 是 int & 時要怎麼寫?
01/12 22:18, 13F

01/12 22:19, , 14F
唔, 好像懂了, 你的意思是為什麼編譯器沒有幫常數做特例
01/12 22:19, 14F

01/12 22:20, , 15F
這大概只能說因為沒有規定他要幫你這麼做吧
01/12 22:20, 15F

01/12 23:43, , 16F
樓上,第3行是非加const不可,為何編譯器不順便加?
01/12 23:43, 16F

01/12 23:44, , 17F
第二行也是非加const不可,這時編譯器就自動幫忙加const
01/12 23:44, 17F

01/12 23:44, , 18F
為我是好奇為何會有差別待遇
01/12 23:44, 18F

01/13 00:06, , 19F
可能是左值、右值的關係?右值要明確寫?
01/13 00:06, 19F

01/13 00:15, , 20F
感覺應該要自動推 @@
01/13 00:15, 20F

01/13 00:22, , 21F
應該左值不給推,要 auto&& 才抓得到,auto& 就比照 T&
01/13 00:22, 21F

01/13 00:23, , 22F
  右
01/13 00:23, 22F

01/14 05:45, , 23F
2 是 int 不是 const int。that's all.
01/14 05:45, 23F
文章代碼(AID): #1KirZkZl (C_and_CPP)
文章代碼(AID): #1KirZkZl (C_and_CPP)