《C++ Primer, 3/e》中文版 p.108 討論
原文為
const int ival = 1024; const int *const &pi_ref = &ival; // JK 注:第一式如果由右往左閱讀上述定義,我們會發現,
pi_ref
是個 reference,代表一個指標,此指標指向一個型別為int
的const
object。我們的 reference 代表的不是一個常數指標,而是一個非常數指標,指向一個常數 object。正確的定義應該是這樣:int *const &pi_ref = &ival; // JK 注:第二式
這段敘述我已經遇見三次啦,在此一次解決。根據侯 Sir 修潤過的敘述,第一式是個 reference to "non-const pointer to a const object",因此應為
const int*& pi_ref = &ival;
這也是一般人最常想到的(錯誤)形式,符合書中鋪陳脈絡。而第二式是正確定義,解釋如下:因為 ival
是個 const int
,因此 &ival
的型別是 const int*
,而且是個 rvalue;欲將 rvalue 綁定至 reference,此 reference 必須是個 reference to const
,因此是 const int*
這個 pointer type 的常數版,也就是 const int* const
。所以第二式應為:
const int* const& pi_ref = &ival;
書中要強調的就是上面所強調的那個 const
。
--
希望就此一了百了 XD。
const magic?
哈哈....我真的拿了complier來試,真的只有最後一個才可以,慢慢看懂中
....
亂掉了~
這裡沒編譯器~
回家再弄懂吧 orz
終於懂了...
原來是 &ival 的緣故~
就如同~
int const &ival=1024; //ok
( const int &ival=1024; )
int &ival=1024; //error
嗯,沒錯 :)。
<< 回到主頁