C++ 通过未定义的无符号整数读取无符号字符数组是否不安全?
我读了这个问题,对我的代码应该做什么感到非常困惑。如果我的读数正确,根据当前标准,我下面的代码未定义。下面是我需要的一切,我真的找不到更好的方法来做到这一点。使用左移和OR绝对不是我想要的。这样就可以了吗 编辑:是的,在设置了C++ 通过未定义的无符号整数读取无符号字符数组是否不安全?,c++,language-lawyer,undefined-behavior,C++,Language Lawyer,Undefined Behavior,我读了这个问题,对我的代码应该做什么感到非常困惑。如果我的读数正确,根据当前标准,我下面的代码未定义。下面是我需要的一切,我真的找不到更好的方法来做到这一点。使用左移和OR绝对不是我想要的。这样就可以了吗 编辑:是的,在设置了rbg的值而不是n之后,我正在读取n union Pixel { unsigned char rgb[4]; uint32_t n; Pixel(): n(0) {} }; 这是C++的一部分,在这里,编译器比标准更容易检查编译器的操作。
rbg
的值而不是n之后,我正在读取n
union Pixel {
unsigned char rgb[4];
uint32_t n;
Pixel():
n(0) {}
};
这是C++的一部分,在这里,编译器比标准更容易检查编译器的操作。据我所知,大多数编译器仍能实现您所期望的功能(MSVC、GCC、CLANG)。你在想什么深奥的事吗
下面的链接中提到的Sun C++编译器不工作:
要做什么?你的目标是什么?到目前为止没有错。但是,如果您访问的成员不是您放在那里的,它就是UB。@LightnessRacesinOrbit我想确定我的代码不包含未定义的行为。@xiver77:什么时候?在什么条件下?您没有展示如何使用这个
union
。虽然它在技术上是UB,但许多编译器都支持它作为扩展,主要是因为——据我所知——这种类型双关在C中是允许的。通常建议的替代方法是使用memcpy
。