Я знаю, что в С++ 0x
или NULL
был заменен на nullptr
в приложениях на основе указателей. Мне просто интересно узнать, почему они сделали эту замену?
В каком сценарии используется nullptr
над NULL
полезным при работе с указателями?
Я знаю, что в С++ 0x
или NULL
был заменен на nullptr
в приложениях на основе указателей. Мне просто интересно узнать, почему они сделали эту замену?
В каком сценарии используется nullptr
над NULL
полезным при работе с указателями?
nullptr
всегда является типом указателя. 0
(иначе C NULL перешел на С++) может вызвать неоднозначность в перегруженном разрешении функций, среди прочего:
f(int);
f(foo *);
Вы можете найти хорошее объяснение, почему его заменили, прочитав Имя нулевого указателя: nullptr, чтобы процитировать документ:
Эта проблема относится к следующим категориям:
Улучшите поддержку для создания библиотек, предоставив пользователям возможность писать менее двусмысленный код, чтобы разработчикам библиотек больше не нужно было беспокоиться о перегрузке интегральных и указательных типов.
Улучшите поддержку универсального программирования, упростив выражение как целого числа 0, так и nullptr однозначно.
Сделать С++ проще для обучения и изучения.
Вот формулировки Бьярна Страуступа,
В С++ определение NULL равно 0, поэтому существует только эстетическая разница. Я предпочитаю избегать макросов, поэтому я использую 0. Другая проблема с NULL заключается в том, что люди иногда ошибочно полагают, что она отличается от 0 и/или не целой. В предстандартном коде NULL был/иногда определен чем-то неподходящим, и поэтому его/его следует избегать. Это менее распространено в наши дни.
Если вам нужно называть нулевой указатель, назовите его nullptr; то, что он вызывается в С++ 11. Тогда "nullptr" будет ключевым словом.
Одна из причин: буква 0
имеет плохую тенденцию приобретать тип int
, например. в идеальном переадресации аргументов или в целом в качестве аргумента с шаблоном типа.
Другая причина: читаемость и ясность кода.