Почему и когда брошенный должен обуглить необходимый volatile&?

В повышении:: деталь:: addressof_impl:: f () серия reinterpret_casts сделан для получения исполнительного адреса объекта в случае, если class T перегрузился operator&():

template struct addressof_impl
{
    static inline T* f( T& v, long )
    {
        return reinterpret_cast(
            &const_cast(reinterpret_cast(v)));
    }
}

К чему цель броска const volatile char& вместо того, чтобы просто бросить к char&?

11
задан sharptooth 25 February 2010 в 12:36
поделиться

2 ответа

Приведение к char & завершится ошибкой, если T имеет const или ] volatile квалификаторы - reinterpret_cast не может их удалить (но может добавить), а const_cast не может вносить произвольные изменения типа.

9
ответ дан 3 December 2019 в 08:55
поделиться

Объект может быть const или volatile , или и тем, и другим (каким бы оксюморонным он ни был), в этом случае, вероятно, reinterpret_cast it к типу, у которого отсутствуют эти атрибуты. (Двигаться в обратном направлении, конечно, никогда не проблема).

4
ответ дан 3 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: