[問題] C++ constant reference的小疑問

看板Programming作者 (jasper)時間8年前 (2016/08/09 10:33), 8年前編輯推噓4(407)
留言11則, 3人參與, 最新討論串1/1
小弟想請教一些觀念性的問題,最近遇到一個錯誤是 int i = 1; int *pi = &i; const int *& rpci = pi; // error C2440: 'initializing': cannot convert from 'int *' to 'const int *&' 我對這段有段小疑惑,因為下面這段的寫法是合法的 int i = 1; const int &ci = i; 那為什麼換成constant pointer reference就不行呢? 上網查了一下,有得出下面可能發生的錯誤 const int i = 99; int *pi; const int*& rpci = pi; //if pass rpci = &i; *pi = 10; 如果允許const int* reference to int*, 那就可以透過pi來修改常數i,所以不給過... 但是我很好奇const int* 是否能reference一個int* ? 這樣在語法上到底合不合法(雖然有隱患)? 因為const int Reference to int實際上是ok的, 所以我懷疑是不是VC++自己把我擋掉的? 麻煩請各位高手指點一下@@ 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.2.10 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1470709984.A.AD4.html ※ 編輯: jamod (60.249.2.10), 08/09/2016 10:34:40

08/09 13:04, , 1F
你的「能不能」包含 explicit 轉型嗎?
08/09 13:04, 1F
不包含好了@@,我其實只是比較好奇這段的語法是否合法? 因為我曾經因為const int**和 int**的問題被VC++的compiler婊過, 所以有點混亂... ※ 編輯: jamod (60.249.2.10), 08/09/2016 13:19:12 ※ 編輯: jamod (60.249.2.10), 08/09/2016 13:22:25

08/09 21:20, , 2F
*&這樣的寫法能放到函式的引數。但這樣
08/09 21:20, 2F

08/09 21:23, , 3F
不行,可見Primer C++第7章函式271頁。
08/09 21:23, 3F

08/09 21:25, , 4F
第四章指標p121頁。
08/09 21:25, 4F

08/09 21:27, , 5F
*&在函式裡,意為對傳來的引數deference
08/09 21:27, 5F

08/09 21:28, , 6F
可理解為取值。然不可在定義式這樣寫*&
08/09 21:28, 6F

08/09 21:30, , 7F
你有對*&賦值的動作。
08/09 21:30, 7F
感謝指點,但我還是有點小疑惑,以上方程式碼而言: int *pi; const int*& rpci = pi; 雖然會出錯,但是只要把第二行的const拿掉就能正確編譯了, 實際上我應該就是單純的對一個int pointer的別名進行初始化吧?@@ 甚至寫成 const int*const & rpci = pi; 也是能正確編譯的,我不太能理解為何將要reference的pointer指定為const就能編譯? 有點好奇是compiler雞婆把我擋下的呢?還是在語法規則上就是不合法了? ※ 編輯: jamod (60.249.2.10), 08/10/2016 09:38:52

10/16 15:46, , 8F
non-const reference只能用non-const綁定
10/16 15:46, 8F

10/16 15:47, , 9F
但con-ref可以綁所有的 const/non-const
10/16 15:47, 9F

10/16 15:54, , 10F
const int &ci = i 表示 ci 不能改i的值
10/16 15:54, 10F

10/16 15:54, , 11F
但 i 自己可以改,你跑跑看就知道
10/16 15:54, 11F
文章代碼(AID): #1NgK3WhK (Programming)
文章代碼(AID): #1NgK3WhK (Programming)