Sta*_*ked 10 c++ alignment language-lawyer
如果我有这样一个对象:
struct {
uint32_t n;
uint8_t c;
} blob {};
Run Code Online (Sandbox Code Playgroud)
然后将有3'填充'字节.
UB是否可以访问填充的字节?例如:
uint8_t * data = reinterpret_cast<uint8_t*>(&blob);
std::cout << data[4] << data[5] << data[6] << data[7];
Run Code Online (Sandbox Code Playgroud)
我首先假设这可能是UB,但如果这是真的那么memcpy也将是UB:
memcpy(buf, &blob, sizeof(blob));
Run Code Online (Sandbox Code Playgroud)
我的具体问题是:
不,当整个对象被初始化为零时,不是UB访问填充(标准在§8.5/ 5中说,当对象初始化时,填充初始化为0位)或者值初始化并且它不是具有用户定义的构造函数的类.
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |