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 として宣言されていることを考えると、オブジェクトを const オブジェクトとして参照できるのに、ポインターでは同じことができないのはなぜですか?

4

2 に答える 2

2

注意:const参照はオブジェクトを意味するものではありませconst。それは単に、その参照を通じて読み取り専用
であるオブジェクトを意味します。したがって、オブジェクトが であるかどうかにかかわらず、読み取り専用の参照またはポインターを持つことができます。const

さて、あなたが言及したことが許可されている場合はrefConstPtrB = pointer_to_some_const_B、 と言ってから、 を介してそのオブジェクトを変更できます。これは、ポインターのターゲットの -ness に違反ptrBします。const

于 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 に答える