类型双关主题的变化:就地琐碎构造
我知道这是一个很普通的主题,但是尽管很容易找到典型的UB,但到目前为止我还没有找到这个变体。 因此,我尝试正式引入Pixel对象,同时避免实际复制数据。 这有效吗? struct Pixel { uint8_t red; uint8_t green; uint8_t blue; uint8_t alpha; }; static_assert(std::is_trivial_v<Pixel>); Pixel* promote(std::byte* data, std::size_t count) { Pixel * const result = reinterpret_cast<Pixel*>(data); while (count-- > 0) { new (data) Pixel{ std::to_integer<uint8_t>(data[0]), std::to_integer<uint8_t>(data[1]), std::to_integer<uint8_t>(data[2]), std::to_integer<uint8_t>(data[3]) }; data += sizeof(Pixel); } return result; // throw in …