首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++类型转换的疑义

2012-10-15 
C++类型转换的疑问在Windows 32位系统下:int i转换成char c (char*)i会把int(4个字节)切割成char(1个

C++类型转换的疑问
在Windows 32位系统下:
int i;
转换成char c = (char*)i;
会把int(4个字节)切割成char(1个字节),但是&c和&i是相等的,也就是转换并没有导致指针的偏移。

对于下面的转换:
class Base1
{
  int base1;
};
class Base2
{
  int base2;
};
class Derived : public Base1, public Base2
{
  int derived;
};

Derived* pDerived = new Derived;
Base2* pBase2 = (Base2*)pDerived; // 指针发生了偏移,pDerived与pBase2不是同一个地址,如下图所示:


编译器在进行类型转换的时候:是不是对于C++的内建类型都不会进行指针的偏移,但是对于用户定义的类型会进行指针的偏移呢?

[解决办法]
<<Inside the C++ Object Model>>
[解决办法]
因为Derived中有一个Base1,一个Base2,这个地方的强转相当于调用了static_cast,
会得出这个类中的Base2的首地址。

如果有个函数void some_fun(Base2 *),你传入一个Derived *
你也会发现这个值变了,这里也是隐含调用了static_cast

热点排行