Ответ 1
Я исследовал тему косвенности с помощью нулевых указателей в этом ответе. Короче говоря, он действительно четко определен как таковой, как это было разработано в ваших цитированных основных проблемах. Комитет использовал понятие пустой ценности, предложенное много лет назад (но никогда не принятое); *p
должен быть таким пустым значением lvalue, и если мы не попытаемся получить доступ к (несуществующей) ячейке памяти за этим значением lvalue (например, путем преобразования lvalue-to-rvalue), все остальные операции ведут себя так, как ожидалось, Например. &*p
эквивалентно p
, если p
недействителен. (Это также работает для указателей в конце массива, что необходимо для общей идиомы &arr[n]
).
Я также начал писать бумагу для пустых lvalues (это WIP, а rebase против N4640 еще не завершена), поэтому есть шанс, что мы увидим больше этого на более позднем этапе.