我很高兴在我的代码中使用 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
无论对其进行多少次强制转换,它的值都保持不变,但这种想法是否正确?