Vis*_*ddi 0 c++ casting type-conversion
假设我有以下层次结构:
class A
{
public:
A()
private:
int aa;
}
class B: public A
{
public:
B()
private:
int bb;
}
class D: public B
{
public:
D()
private:
int dd;
}
Run Code Online (Sandbox Code Playgroud)
当我在main中键入以下代码时:
D dobj;
std::cout<<"Address of D object: "<<&dobj<<std::endl;
A aobj = static_cast<A>(dobj);
A* aptr = static_cast<A*>(&dobj);
std::cout<<"Address of D object: "<<&dobj<<std::endl;
std::cout<<"Address of aptr object: "<<&aptr<<std::endl;
std::cout<<"Address of A object: "<<&aobj<<std::endl;
Run Code Online (Sandbox Code Playgroud)
其输出是:
Address of dobj object: 0012FF0C
Address of dobj object: 0012FF0C
Address of aptr object: 0012FF18
Address of aobj object: 0012FF14
Run Code Online (Sandbox Code Playgroud)
为什么aptr和aobj的地址不同?他们不应该是一样的??
为什么dobj和aptr的地址不同?他们不应该一样吗?
我正在使用VC++编译Windows.
谢谢,De Costo.
为什么
aptr
和&aobj
不同?
首先,您打印出错误的指针: &aptr
是"地址" aptr
,而不是" aptr
指向的对象的地址".您需要打印aptr
才能打印" aptr
点到的对象的地址",这可能是您真正想要做的事情.
aptr
是指向A
部分的指针dobj
. aobj
是复制的的A
一部分dobj
.
aptr
并且&aobj
是不同的,因为它们是不同对象的地址.