Вопрос

Это правда, что const_cast это просто способ сказать компилятору: «Хватит стонать, воспринимайте это как неконстантный указатель»?Бывают ли случаи, когда const_cast сам транслируется в реальный машинный код?

Это было полезно?

Решение

Вполне возможно, что могут существовать архитектуры, в которых константный указатель имеет представление, отличное от неконстантного, и в этом случае компилятору придется генерировать некоторый код.Однако я не знаю ни одной такой архитектуры.

Другие советы

Нет, он просто удаляет атрибут const во время компиляции.

const_cast просто отбрасывает константность атрибута и не более того.

const не меняет представление типа, в частности представление T* точно так же, как T const*.

Учитывать:

int i, 
    * const cpi = &i,
    * const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*

Представление cpi в то же время представляет собой int* и int const* с помощью *pcpci.

Нет возможности представлять cpi измениться, когда pcpci инициализируется.

Конечно, если объекты-указатели имеют несущественные биты, компилятор может перевернуть их случайным образом;в частности, const_cast может перевернуть несущественные биты указателя, но также может и любое неявное преобразование.Я не думаю, что этот случай существует в реальном мире.

То же самое применимо, когда два разных битовых шаблона приводят к одному и тому же значению адреса (база + смещение, если смещение достаточно велико).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top