如果我已将结构的成员复制到类(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);
}

最重要的是,您需要将Bufferiovec都设置为标准布局类型,并且iovec的对齐方式不能比Buffer严格(即更大)。



您还需要注意不要破坏strict aliasing rules:通常,您不能使用两个指针或对引用同一内存位置的不同类型的引用。

关于c++ - 标准布局类型和reinterpret_cast,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7507818/

10-12 15:06