Допустим ли этот фрагмент кода (и определенное поведение)?
int &nullReference = *(int*)0;
И g ++, и clang ++ компилируют его без предупреждения, даже при использовании -Wall
, -Wextra
, -std = c ++ 98
, -pedantic
, -Weffc ++
...
Конечно, ссылка на самом деле не нулевая, поскольку к ней нельзя получить доступ (это означало бы разыменование нулевого указателя), но мы могли бы проверить, null или нет, проверив его адрес:
if( & nullReference == 0 ) // null reference