【发布时间】:2017-09-03 08:25:08
【问题描述】:
假设我有以下代码:
int* p = new (new unsigned char[3*sizeof(int)]) int{};
unsigned char* b = reinterpret_cast<unsigned char*>(p);
auto b2 = b + 2*sizeof(int);//it is UB if compilers do not assume that
//b is pointer to an unsigned char[3*sizeof(int)]
int* p2 = new (b2) int{};
如果b 不是指向为*p 提供存储的3*sizeof(int) 无符号字符数组的指针,则C++ 标准的[expr.add] 部分暗示b+2*sizeof(int) 是未定义的行为(UB )。否则,如果编译器必须假定 b 也是指向为 *p 提供存储的 unsigned char 数组的指针,则它不是 UB。
那么标准中是否规定编译器必须假定b 是指向为*p 提供存储的unsigned char[3*sizeof(int)] 的指针?
【问题讨论】:
标签: c++ pointers language-lawyer