2012-04-05 108 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; 

因此,您无法完成您标记的任务。

希望这会有所帮助!