Não avaliar a expressão à qual sizeof é aplicado torna legal desreferenciar um ponteiro nulo ou inválido dentro de sizeof em C ++?
Primeiro de tudo, eu viesta pergunta sobre C99 e as referências de resposta aceitasoperando não é avaliado redação no rascunho da Norma C99. Não tenho certeza se esta resposta se aplica ao C ++ 03. Há tambémesta pergunta sobre C ++ que tenha uma resposta aceita citando uma redação semelhante e tambémEm alguns contextos, operandos não avaliados são exibidos. Um operando não avaliado não é avaliado. redação.
Eu tenho este código:
int* ptr = 0;
void* buffer = malloc( 10 * sizeof( *ptr ) );
A questão é - existe uma dereferência de ponteiro nulo (e, portanto, UB) dentrosizeof()
?
C ++ 03 5.3.3 / 1 dizO operador sizeof gera o número de bytes na representação do objeto de seu operando. O operando é uma expressão que não é avaliada ou um p-id do tipo com ressentimento.
As respostas vinculadas às citações citam esse ou outro texto semelhante e fazem uso da parte "não é avaliada" para deduzir que não há UB.
No entanto, não consigo encontrar exatamente onde os links padrãoavaliação ter ou não ter UB neste caso.
"Não avaliar" a expressão à qual sizeof é aplicado torna legal desreferenciar um ponteiro nulo ou inválido dentro de sizeof em C ++?