Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过未定义的无符号整数读取无符号字符数组是否不安全?_C++_Language Lawyer_Undefined Behavior - Fatal编程技术网

C++ 通过未定义的无符号整数读取无符号字符数组是否不安全?

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++的一部分,在这里,编译器比标准更容易检查编译器的操作。

我读了这个问题,对我的代码应该做什么感到非常困惑。如果我的读数正确,根据当前标准,我下面的代码未定义。下面是我需要的一切,我真的找不到更好的方法来做到这一点。使用左移和OR绝对不是我想要的。这样就可以了吗

编辑:是的,在设置了
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