【问题标题】:Is reading an unsigned char array through an unsigned integer undefined and thus not safe?是否通过未定义的无符号整数读取无符号字符数组,因此不安全?
【发布时间】: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


【解决方案1】:

这是 C++ 的其中一个部分,它比遵循标准更容易检查编译器正在做什么。据我所知,大多数编译器仍然按照您的预期进行(MSVC、GCC、CLANG)。你在想什么深奥的东西吗?

在以下链接中提到 Sun C++ 编译器无法正常工作:

http://blog.regehr.org/archives/959

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多