struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
Насколько я помню, указатель на любой тип не указателя может быть неявным образом перенесен на void*
в C++. Почему тогда то же самое не допускается для литья ponter к типу указателя до void**
?Неверное преобразование из Foo ** в void ** - почему неявное преобразование типа разрешено void *, но не void **?
Спасибо, это обучающее чтение. Я до сих пор не могу представить себе архитектуру, в которой выполнение '(void **) & (Foo *)' недопустимо, но тот факт, что стандарт запрещает это, - это что-то рассмотреть. –
@ Violet Giraffe Архитектура не имеет значения. Выполнение этого (с реальной переменной как минимум) является неопределенным поведением, компилятор теоретически может сделать что-либо. – 2501