jac*_*k X 9 c++ language-lawyer
考虑这个例子
struct X { int i; };
extern X xobj;
int* p3 = &xobj.i; // #1
X xobj; // #2
Run Code Online (Sandbox Code Playgroud)
at 的声明#2导致 的构造xobj,成员子对象的取地址操作i在该点之前。根据[class.cdtor] p3
要形成指向对象 obj 的直接非静态成员的指针(或访问其值) , obj 的构造应已开始且其销毁不应完成,否则指针值的计算(或访问成员)值)导致未定义的行为。
那么,UB处的操作#1是?