【发布时间】:2015-05-28 19:14:50
【问题描述】:
我阅读了this 的问题,对我与我的代码有什么关系感到非常困惑。如果我的阅读是正确的,我下面的代码根据当前标准是未定义的。以下是我需要的一切,我真的找不到更好的方法来做到这一点。使用 OR 左移绝对不是我想要的。这样就可以了吗?
编辑:是的,在设置 rbg 而不是 n 的值之后,我正在阅读 n。
union Pixel {
unsigned char rgb[4];
uint32_t n;
Pixel():
n(0) {}
};
【问题讨论】:
-
做什么?你的目标是什么?
-
到目前为止没有任何问题。但是如果你访问一个你没有放在那里的成员,那就是 UB。
-
@LightnessRacesinOrbit 我想确保我的代码不包含未定义的行为。
-
@xiver77:什么时候?在什么条件下?你没有展示你如何使用这个
union。 -
虽然它在技术上是 UB,但许多编译器支持它作为扩展,主要是因为 - 据我所知 - 这种类型的双关语在 C 中是允许的。通常建议的替代方法是使用 @987654326 @.
标签: c++ language-lawyer undefined-behavior