我曾认为,解引用不指向有效对象的指针是未定义行为,但仅仅计算这样的指针是可以的。
然而,如果我正确理解expr.add[4],情况并非如此。
那么,这些指针计算中哪些是明确定义的呢?
int a = 42;
int *p = &a;
p; // valid, and obviously ok
p++; // invalid, but ok, because one past the end of 'array' containing 1 element?
p++; // UB ?
这个案例怎么样?
int *p = nullptr;
p; // invalid, and obviously ok (considered one past the end?)
p++; // one past the end? or UB?
p++
的推理。这个推理难道不适用于第三种情况吗? - cigien