C++匿名结构指针赋值

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),旨在与较旧的编译器一起使用.它有一些限制(例如,如果内存服务,你只能在每个范围使用它一次),但无论如何它可能比什么都好.


CB *_*ley 7

我想你必须使用C++ 11 decltype:

oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

reinterpret_cast<unsigned char*&>(oTwoShort) = reinterpret_cast<unsigned char*>(msg);
Run Code Online (Sandbox Code Playgroud)

但是,真的吗?

  • @ Di-0xide,"但是,真的吗?" (2认同)