如果我有这样的对象:
struct {
uint32_t n;
uint8_t c;
} blob {};
那么将有3个“填充”字节。
是 UB 访问填充字节吗?例如:
uint8_t * data = reinterpret_cast<uint8_t*>(&blob);
std::cout << data[4] << data[5] << data[6] << data[7];
我首先假设这可能是 UB,但如果这是真的,那么 memcpy 也将是 UB:
memcpy(buf, &blob, sizeof(blob));
我的具体问题是:
- 是 UB 访问填充字节吗?
- 如果不是,那么这是否意味着也定义了这些值?