valor do ponteiro static_cast'd

No esboço atual padrão (e C ++ 17),esta está escrito sobre static_casting umvoid *:

Um pré-valor do tipo "ponteiro paracv1 void ”pode ser convertido em um pré-valor do tipo“ ponteiro paracv2 T ”, onde T é um tipo de objeto ecv2 é a mesma qualificação cv que ou maior qualificação cv que,cv1. Se o valor original do ponteiro representar o endereço A de um byte na memória e A não atender ao requisito de alinhamento de T, o valor resultante do ponteiro não será especificado. Caso contrário, se o valor do ponteiro original apontar para um objetoae há um objetob do tipo T (ignorando a qualificação cv) interconvertível por ponteiro coma, o resultado é um ponteiro parab. Caso contrário, o valor do ponteiro é inalterado pela conversão.

Gostaria de saber, qual é a diferença se a conversão é interconversível por ponteiro ou não? Existe um caso, ao transmitir umvoid * para algo interconvertível com ponteiro realmente altera o valor do ponteiro? Qual é a intenção dessa distinção?

Para completarponteiro interconversível:

Dois objetos aeb são interconversíveis por ponteiro se:

(4.1) são o mesmo objeto, ou(4.2) um é um objeto de união e o outro é um membro de dados não estático desse objeto ([class.union]), ou(4.3) um é um objeto de classe de layout padrão e o outro é o primeiro membro de dados não estáticos desse objeto ou, se o objeto não tiver membros de dados não estáticos, qualquer subobjeto de classe base desse objeto ([class. mem]) ou(4.4) existe um objeto c tal que a e c são intercambiáveis por ponteiro, e c e b são interconversíveis por ponteiro.

Se dois objetos são interconversíveis por ponteiro, eles têm o mesmo endereço, e é possível obter um ponteiro para um de um ponteiro para o outro por meio de um reinterpret_cast.

questionAnswers(2)

yourAnswerToTheQuestion