Я не уверен, было ли это задано раньше, но, должно быть, я верю. Рассмотрим простую линию для начала вопрос:Как static_cast может использовать int для char, но не reinterpret_cast?
int a ;
char b = reinterpret_cast<char> (a);
reinterpret_cast
Я понимаю интерпретировать биты шаблон типа х, как типа у, он не Ответ конечно должен работать из-за несоответствия размера и на самом деле это не так.
Теперь рассмотрим этот другой код:
int a ;
char b = static_cast<char> (a);
Это работает! , Теперь мой вопрос, как он может работать? Я имею в виду, компилятор отбивает биты? , Я уверен sizeof(char) < sizeof(int)
. Если это, reinterpret_cast
также должен работать по той же методике?
* "... и' reinterpret_cast' не делает этого "*. какая часть спецификации говорит, что? – Nawaz
@Nawaz, часть, которая определяет конверсии, разрешенные 'reinterpret_cast', очевидно, где вы ожидаете, что она это скажет? [expr.reinterpret.cast] «Конверсии, которые могут быть выполнены явно с использованием' reinterpret_cast', перечислены ниже. ** Нет другое преобразование может быть выполнено явно с использованием 'reinterpret_cast'. **« –
Несмотря на кажущуюся широту его имени, reinterpret_cast' довольно ограничен. Как отмечает @JonathanWakely, есть список вещей, которые он может сделать (в основном вещи, содержащие указатели и ссылки), и больше ничего не разрешено. 5.2.10 [expr.reinterpret.cast]. Совсем не похоже на C-стиль ... –