这句代码是什么意思?

时间:2022-08-23 21:18:30
pBoneComb = reinterpret_cast<LPD3DXBONECOMBINATION>( pMeshContainer->pBoneCombinationBuf->GetBufferPointer() );

GetBufferPointer 跟 pBoneComb 是不同的类型这样能够转换吗?




5 个解决方案

#1


可以转换,reinterpret_cast可用于不同类型的转换。

reinterpret_cast是C++里的强制类型转换符。   操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。   例如:int *n= new int ;   double *d=reinterpret_cast<double*> (n);   在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。   因此, 需要谨慎使用 reinterpret_cast.   == ===========================================   == static_cast .vs. reinterpret_cast   == ================================================   reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)   static_cast和reinterpret_cast的区别主要在于多重继承,比如   class A { public: int m_a; };   class B { public: int m_b; };   class C : public A, public B {};   那么对于以下代码:   C c;   printf("%p, %p, %p\r\n", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));   前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为static_cast计算了父子类指针转换的偏移量,并将之转换到正确的地址(c里面有m_a,m_b,转换为B*指针后指到m_b处),而reinterpret_cast却不会做这一层转换。   因此, 你需要谨慎使用 reinterpret_cast.

#2


参考这里
http://baike.baidu.com/view/1263731.htm

#3


强制类型转换reinterpret_cast,可以的

#4


强制类型转换

#5


引用 1 楼 gameslq 的回复:
可以转换,reinterpret_cast可用于不同类型的转换。

C/C++ code


reinterpret_cast是C++里的强制类型转换符。   操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。   例如:int *n= new int ;   double *d=reinterpret_cast<double*> (n);   在进行计……


+1

#1


可以转换,reinterpret_cast可用于不同类型的转换。

reinterpret_cast是C++里的强制类型转换符。   操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。   例如:int *n= new int ;   double *d=reinterpret_cast<double*> (n);   在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。   因此, 需要谨慎使用 reinterpret_cast.   == ===========================================   == static_cast .vs. reinterpret_cast   == ================================================   reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)   static_cast和reinterpret_cast的区别主要在于多重继承,比如   class A { public: int m_a; };   class B { public: int m_b; };   class C : public A, public B {};   那么对于以下代码:   C c;   printf("%p, %p, %p\r\n", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));   前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为static_cast计算了父子类指针转换的偏移量,并将之转换到正确的地址(c里面有m_a,m_b,转换为B*指针后指到m_b处),而reinterpret_cast却不会做这一层转换。   因此, 你需要谨慎使用 reinterpret_cast.

#2


参考这里
http://baike.baidu.com/view/1263731.htm

#3


强制类型转换reinterpret_cast,可以的

#4


强制类型转换

#5


引用 1 楼 gameslq 的回复:
可以转换,reinterpret_cast可用于不同类型的转换。

C/C++ code


reinterpret_cast是C++里的强制类型转换符。   操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。   例如:int *n= new int ;   double *d=reinterpret_cast<double*> (n);   在进行计……


+1