2012-04-05 110 views
1

有些事情我不太明白與引用是如何在C++處理:引用const對象/用C++指針

B objB = B();     // Regular B object 
const B &refConstObjB = objB; // Reference to const B object 

B* ptrB = new B();    // Regular pointer to B 
B* const &refPtrConstB = ptrB; // Reference to const pointer to B 

上述所有編譯就好了。但下列情況不:

const B* &refConstPtrB = ptrB; // Reference to pointer to const B 

同時考慮對象和指針被宣佈爲非const的,我爲什麼不能引用對象作爲一個const對象,但不能做的指針一樣嗎?

+0

順便說一下,我的變量名是錯誤的!應該反轉refConstPtrB和refPtrConstB。 – RedsChineseFood 2012-04-05 03:07:42

回答

2

只需注意:A const參考不是意味着const對象。
它只是表示通過該引用的對象是只讀。因此,無論對象是否爲const,您都可以擁有隻讀引用或指針。

現在,如果你所提到的允許,你可以說refConstPtrB = pointer_to_some_const_B,然後發生變異通過ptrB對象,這將違反const -ness指針的目標。

+0

我明白了!聲明refConstPtrB不保證被指向的數據是不變的。我將不得不聲明一個指向常量B對象的指針,以使refConstPtrB合法。我應該看到這個!哦,我猜我累了! – RedsChineseFood 2012-04-05 03:04:44

1

這個錯誤的原因是你可以在它的類型系統中放一個洞。考慮以下代碼:

const B dontChangeMe; 
B* ptrB = new B(); 

/* This step is NOT legal. */ 
const B* &refConstPtrB = ptrB; 

/* Uh oh! I now have ptrB pointing at dontChangeMe! */ 
refConstPtrB = &dontChangeMe; 

因此,您無法完成您標記的任務。

希望這會有所幫助!