三个类 class A{}; class B: public A {}; class C: public B {}; 使用指向B的this指针进行cast 发现 (A*)this和(A*)(&*this)的值不同 (A*)this 和 this的值相同 我用的是vs 2008,请问这两种cast有啥区别? 谢谢
【在 C***y 的大作中提到】 : 三个类 : class A{}; : class B: public A {}; : class C: public B {}; : 使用指向B的this指针进行cast : 发现 : (A*)this和(A*)(&*this)的值不同 : (A*)this 和 this的值相同 : 我用的是vs 2008,请问这两种cast有啥区别? : 谢谢
【在 C***y 的大作中提到】 : 三个类 : class A{}; : class B: public A {}; : class C: public B {}; : 使用指向B的this指针进行cast : 发现 : (A*)this和(A*)(&*this)的值不同 : (A*)this 和 this的值相同 : 我用的是vs 2008,请问这两种cast有啥区别? : 谢谢
这个 B 里面 (A*)this 和 (A*)(&*this) 其实有时候就是不等的,dereference 以后 依赖于 pointer type, 地址可能是不同的。这个在 C 里面总是相同的。在 c++ 里面 不能假定总是相同的。 前面(后面?)wifeholder 的猜测是对的。 今天又学了一点,太 tricky 了,到啥时候才能宣称会 c++ 阿。。
【在 C***y 的大作中提到】 : 没有定义 : 可能是visual studio的bug。。。
p*t
30 楼
class A里面有virtual的函数吗?如果有,可能是想用dynamic type.
【在 C***y 的大作中提到】 : 三个类 : class A{}; : class B: public A {}; : class C: public B {}; : 使用指向B的this指针进行cast : 发现 : (A*)this和(A*)(&*this)的值不同 : (A*)this 和 this的值相同 : 我用的是vs 2008,请问这两种cast有啥区别? : 谢谢
w*r
31 楼
c++的底层还是c和汇编,找不着原因就看汇编代码,那是精确的
【在 r****t 的大作中提到】 : 这个 B 里面 (A*)this 和 (A*)(&*this) 其实有时候就是不等的,dereference 以后 : 依赖于 pointer type, 地址可能是不同的。这个在 C 里面总是相同的。在 c++ 里面 : 不能假定总是相同的。 : 前面(后面?)wifeholder 的猜测是对的。 : 今天又学了一点,太 tricky 了,到啥时候才能宣称会 c++ 阿。。