Не сопи бросания не вызывают фактических выбросов код?
Верно ли, что const_cast - это просто способ сказать компилятору: "перестань стонать, рассматривай это как неконстантный указатель"? Есть ли случаи, когдаconst_cast сам переводится в реальный машинный код?
4 ответа:
Возможно, существуют архитектуры, в которых указатель const имеет представление, отличное от неконстантного, и в этом случае компилятор должен будет выдать некоторый код. Однако я не знаю ни одной такой архитектуры.
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
может переверните несущественные биты указателя, но любое неявное преобразование может также. Я не думаю, что это дело существует в реальном мире.То же самое применяется, когда два разных битовых шаблона приводят к одному и тому же значению адреса (база+смещение, когда смещение достаточно велико).