¿Se puede obtener un puntero a un elemento de representación de objeto completo de un puntero a un subojeto?
Consideremos este código:
int i;
int is[10]{};
unsigned char * p = reinterpret_cast<unsigned char*>(&i);
//p defined to point to the object-representation of the first element of array ints
unsigned char * ps = reinterpret_cast<unsigned char*>(&is[0]);
p += sizeof(int);
ps += sizeof(int);
//now ps points to the end of ints[0] and p point to the end of i;
p += sizeof(int); //Undefined behavior according to [expr.add]
ps += sizeof(int); //Undefined behavior?
unsigned char c = *ps;//Undefined behavior?
Si consideramos esops
apunta a larepresentación de objeto deis[0]
entonces, según la regla aritmética del puntero, el comportamiento no está definido en las dos últimas líneas de código.
Sin embargo, sips
también es un puntero a larepresentación de objeto de la matriz de intis
El comportamiento está definido.
Entonces mi pregunta es: ¿un puntero a larepresentación de objeto de unsuboject también es un puntero a un elemento de larepresentación de objeto del objeto completo que contiene?