注册 登录
编程论坛 C++教室

编译器不支持C++11

rohalloway 发布于 2021-02-09 18:14, 1450 次点击
程序代码:

bool MemoryHack::Hook(void* addr, const void* jumpTo, size_t len, bool JMPt_or_CALLf)
{
    #pragma pack(push, 1)
            struct
            {
                uint8_t opcode;
                uint32_t offset;
            } *ins = static_cast<decltype(ins)>(addr);
    #pragma pack(pop)
}


我的项目不支持C++11标准,请问*ins = static_cast<decltype(ins)>(addr);这句应该如何更改,

非常感谢!
1 回复
#2
rjsp2021-02-10 09:15
程序代码:
    #pragma pack(push, 1)
            struct foo
            {
                uint8_t opcode;
                uint32_t offset;
            };
            foo* ins = (foo*)addr;
    #pragma pack(pop)

但我认为这违法了“严格别名”规则,属于未定义行为。
应该使用 std::bit_cast 来转化,但你的编译器连C++11都不支持的话,那可以用 memcpy 来做。
1