如果我已将结构的成员复制到类(class),是否可以从类(class)强制转换为结构?
#include <stdint.h>
#include <sys/uio.h>
class Buffer
{
public:
void * address;
size_t size;
Buffer(void * address = nullptr, size_t size = 0)
: address(address), size(size)
{
}
operator iovec *() const
{
// Cast this to iovec. Should work because of standard layout?
return reinterpret_cast<iovec *>(this);
}
}
最佳答案
首先,您不能抛弃constness:
所以你至少需要写成
operator iovec const*() const
{
return reinterpret_cast<iovec const*>(this);
}
要么
operator iovec *()
{
return reinterpret_cast<iovec *>(this);
}
最重要的是,您需要将
Buffer
和iovec
都设置为标准布局类型,并且iovec
的对齐方式不能比Buffer
严格(即更大)。您还需要注意不要破坏strict aliasing rules:通常,您不能使用两个指针或对引用同一内存位置的不同类型的引用。
关于c++ - 标准布局类型和reinterpret_cast,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7507818/