Я внимательно перечитывал правила для псевдонимов типов: http://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing У меня конкретно есть вопрос о последнем правиле, в котором нам разрешено приводить:
char
или жеunsigned char
это позволяет проверить представление объекта любого объекта в виде массиваunsigned char
Я заметил, что это делает не включить void
тип. Разве мы не можем быть в состоянии бросить что-нибудь void
и обратно тоже?
В этом случае нет псевдонимов типов, потому что вы не можете исследовать объект через void*
, Для этого вам нужно разыменовать void*
, но это запрещено. void
в любом контексте это неполный тип, и вы не можете разыменовать указатели на неполные типы.
void
является неполным типом. Там никогда не может быть объект типа void
,
void
странно в том что можно что то объявить void*
, но вы бы редко использовали void
сам по себе вне контекста определения функции. В этом смысле это неполный тип, и поэтому сам по себе не имеет реального значения. void
на самом деле просто существует для синтаксиса.
Вы можете технически привести тип к void
,
int i = 0;
(void)i;
но это действительно неоперация. Вы можете увидеть это, когда кто-то пытается скрыть предупреждения компилятора о неиспользуемых переменных. Вы не можете привести результат обратно к исходному типу, потому что он не дает результата.
Вы также можете привести и объявить указатели как void*
, что означает, что он может указывать на что-либо (за некоторыми исключениями). Однако вы не можете разыменовать его, пока не приведете его к полному типу, например unsigned char
,