在C ++中引用const对象/指针

时间:2012-04-05 02:30:13

标签: c++ pointers reference 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对象引用,但不能对指针执行相同的操作?

2 个答案:

答案 0 :(得分:2)

请注意:const引用暗示const对象。
它只是表示通过该引用只读的对象。因此,无论对象是否为const,您都可以拥有只读参考或指针。

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

答案 1 :(得分: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;

因此,您无法执行标记的作业。

希望这有帮助!