[問題] C++ constant reference的小疑問
小弟想請教一些觀念性的問題,最近遇到一個錯誤是
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
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
08/09 21:23, 3F
→
08/09 21:25, , 4F
08/09 21:25, 4F
→
08/09 21:27, , 5F
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
10/16 15:46, 8F
→
10/16 15:47, , 9F
10/16 15:47, 9F
推
10/16 15:54, , 10F
10/16 15:54, 10F
→
10/16 15:54, , 11F
10/16 15:54, 11F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章