UB在操作nullptr时

Ron*_*per -3 c++ pointers

这是围绕由UB递增NULL指针引起的错误示例的讨论的相关问题

假设我定义了这个数据结构:

union UPtrMem
{
    void* p;
    char ach[sizeof(void*)];
}

UPtrMem u;
u.p = nullptr;
u.p++;      // UB according to standards
u.ach[0]++; // why is this OK then??
Run Code Online (Sandbox Code Playgroud)

p并且ach共享相同的内存,所以仅仅是修改内存位置(恰好包含指针)UB的行为?一旦你试图取消引用指针,我认为它只会被取消定义.

Bau*_*gen 10

这仍然是UB,因为

从最近编写的联合成员中读取它是未定义的行为.

(从这里).所以你有UB,无论其价值如何p.总结:

为什么这样可以呢?

它不是.