2006/07/29

《C++ Primer, 3/e》中文版 p.108 討論

原文為

const int ival = 1024;
const int *const &pi_ref = &ival;  // JK 注:第一式

如果由右往左閱讀上述定義,我們會發現,pi_ref 是個 reference,代表一個指標,此指標指向一個型別為 intconst 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。

Blogger yen37/29/2006 6:04 pm 說:

const magic?
哈哈....我真的拿了complier來試,真的只有最後一個才可以,慢慢看懂中

 
Blogger Celith8/01/2006 5:56 am 說:

....
亂掉了~
這裡沒編譯器~
回家再弄懂吧 orz

 
Blogger Celith8/01/2006 12:05 pm 說:

終於懂了...
原來是 &ival 的緣故~

就如同~
int const &ival=1024; //ok
( const int &ival=1024; )

int &ival=1024; //error

 
Blogger Josh Ko8/01/2006 12:38 pm 說:

嗯,沒錯 :)。

 

<< 回到主頁