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