1

对于 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 对象,但不能对指针做同样的事情?

4

2 回答 2

2

请注意:const引用并不意味着对象const
它只是意味着一个通过该引用只读的对象。因此,无论一个对象是否是const,您都可以拥有一个只读引用或指向它的指针。

现在,如果您提到的内容被允许,您可以说refConstPtrB = pointer_to_some_const_B,然后通过 改变该对象,这将违反指针目标的-nessptrBconst

于 2012-04-05T02:36:06.073 回答
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;

因此,您无法完成您标记的作业。

希望这可以帮助!

于 2012-04-05T02:35:17.527 回答