我正在使用一个库(ENet),它使用回调函数。在这些回调函数中,它会传递一个结构体,该结构体包含一个 void* 类型的用户数据,供您自己使用。我想使用该变量,但不想将其作为指针使用。我不想为了指向它而分配内存,我更想直接使用 void* 的空间来存储 size_t 类型的值。
但是,正如预期的那样,当我将 void* 变量转换为 size_t 变量时,会收到严格别名警告。并且回调的结构体没有提供 union 以访问除 void* 以外的其他类型。
我知道可以完全禁用该警告,但我更愿意仅在此特定情况下将其静音。是否有一种方法可以编写这种类型的转换,使编译器知道这是有意的,以避免警告?
编辑:
这里是我要做的事情的示例。由于我需要能够编辑用户值,因此我将其转换为 size_t 类型,同时尝试获取对它的引用:
size_t& offset = reinterpret_cast<size_t&>(packet->userData);
这个代码能够工作,但会产生警告。
size_t&
的任何更改都不会导致void*&
改变,并将void*&
值缓存到寄存器中,忽略你的更改... - Yakk - Adam Nevraumontsizeof(size_t) != sizeof(void*)
会怎样? - zmb