コード内でC++スタイルのキャスト演算子を使用することは非常に満足していますが、舞台裏で何が起こっているのかを本当に理解しているとは言えません。私は基本的に、次の短いプロセス中にポインタに実際に何が起こっているのか疑問に思っています。
class A {};
class B : public A {};
class C : public B {};
A* pC = new C();
B* b = static_cast<B*>(pC); // Is the value of pC changed by the cast?
C* c = static_cast<B*>(pC); // Is the value of pC changed by the cast?
B* b2 = static_cast<B*>(c) // Is the value of c now equal to the value of b2?
pC
が指すオブジェクトは常に型であることに気付きましたC
が、最初のキャストが行われた後、に格納されているアドレスb
はもはや。のアドレスと等しくないと思いpC
ます。しかし、キャストが変更された場合、pC
私の仮定の値は間違っています。一言で言えば、キャスト演算子は実際にキャストするポインタのアドレスを変更できますか?これはかなり簡単な質問に思えるかもしれませんが、私の考えでは、継承階層を持つオブジェクトがメモリ内にどのように格納され、ポインタがキャストを介してどのように操作されるかが明確ではありません。
私の頭の中では、pC
いくつのキャストが実行されてもの値は変わりませんが、この考え方は正しいですか?