提问者:小点点

有没有办法在C++的C联合风格中使用类型双关语?


假设我们有以下工会:

union Color{
    int rgba;//assuming 32 bit int
    struct{
        unsigned char r;
        unsigned char g;
        unsigned char b;
        unsigned char a;
    }ColorComp;
};

访问union的非活动元素(例如设置rgba并尝试访问r)确实是未定义的行为(仅在c++中,而不是在c中)。 在C++中,类型或类型组合可以读/写到与其他不同类型相同的内存位置(即类型双关语),有没有任何方法来实现这种类型的行为(注意:必须由标准定义)?

编辑:删除匿名结构,并用未命名结构替换。


共1个答案

匿名用户

是的,有办法。 将字节复制到要读取字节的类型的对象上。 为此有一个标准函数:memcpy

示例:

struct Color{
    unsigned char r;
    unsigned char g;
    unsigned char b;
    unsigned char a;
};

static_assert(sizeof(Color) == sizeof(std::int32_t));
std::int32_t rgba = some_value;
Color c;
std::memcpy(&c, &rgba, sizeof c);

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(办法|c++|c|联合|风格|中|类型|双关语)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?