このようなオブジェクトがある場合:
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ですか?
- いいえの場合、それは値も定義されていることを意味しますか?