Pode-se obter um ponteiro para um elemento completo de representação de objeto de um ponteiro para um subojeto?
Vamos considerar 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?
Se considerarmos issops
aponta para orepresentação de objeto dois[0]
então, de acordo com a regra aritmética do ponteiro, o comportamento é indefinido nas duas últimas linhas de código.
No entanto, seps
também é um ponteiro para orepresentação de objeto da matriz de intis
o comportamento é definido.
Então, minha pergunta é: faz um ponteiro para orepresentação de objeto de umsubojeto também é um ponteiro para um elemento dorepresentação de objeto do objeto completo que contém?