Qix*_*Qix 4 c++ pointers casting compiler-theory anonymous-types
所以不,这不是最好的做事方式.但是,为了理论,如何成功地将指针值分配给匿名结构的指针?
#pragma pack(push,1)
struct
{
__int16 sHd1;
__int16 sHd2;
} *oTwoShort;
#pragma pack(pop)
oTwoShort = (unsigned char*)msg; // C-Error
Run Code Online (Sandbox Code Playgroud)
生产:
错误C2440:'=':无法从'unsigned char*'转换为'<unnamed-type-oTwoShort>*'
该示例假定msg是一个有效的指针本身.
这可能吗?由于您没有实际类型,您甚至可以进行类型转换吗?
Jer*_*fin 11
您可以获得以下类型decltype:
oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);
Run Code Online (Sandbox Code Playgroud)
这是在C++ 11中添加的,因此它不适用于较旧的编译器.Boost的实现大致相同(BOOST_PROTO_DECLTYPE),旨在与较旧的编译器一起使用.它有一些限制(例如,如果内存服务,你只能在每个范围使用它一次),但无论如何它可能比什么都好.
我想你必须使用C++ 11 decltype:
oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);
Run Code Online (Sandbox Code Playgroud)
reinterpret_cast<unsigned char*&>(oTwoShort) = reinterpret_cast<unsigned char*>(msg);
Run Code Online (Sandbox Code Playgroud)
但是,真的吗?
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |