Фундаментальная проблема заключается в том, что C ++ не имеет нулевого значения. Есть нулевые значения указателя, но это не одно и то же. В строке также есть нулевое окончание, но опять же это нечто иное.
Нет способа указать нулевое значение в целом, которое бы работало для C ++, учитывая его философию дизайна. Либо нулевое значение должно быть каким-то недопустимым значением, либо должен быть какой-то внешний флаг - иными словами, избыточная память, на которую нужно ссылаться, чтобы использовать переменную. Ни один из них не подходит для языка низкого уровня, который требует эффективности.
Будет больше возможных значений указателя, чем сам процесс может использовать сам, поэтому, как правило, нет необходимости требовать указанного неверного значения. Это не должно быть все биты ноль, хотя это самый распространенный случай; ноль - это просто имя указателя. (Да, я с нетерпением жду nullptr
.) Точно так же кодировки текста не используют весь возможный диапазон значений для символов, поэтому резервирование одного для чего-то определенно не символа работает достаточно хорошо. Это не относится к числам или любому другому виду данных, в которых все значения действительны.