Хотя верно, что объект не может быть «пустым / пустым» в C ++, в C ++ 17 мы получили std::optional
для выражения этого намерения.
Пример использования:
std::optional<int> v1; // "empty" int
std::optional<int> v2(3); // Not empty, "contains a 3"
Затем вы можете проверить, содержит ли optional
значение с
v1.has_value(); // false
или
if(v2) {
// You get here if v2 is not empty
}
Обычный int
(или любой другой тип), однако, никогда не может быть «нулевым» или «пустым» (по вашему определению этих слов) в любом полезном смысле. Считайте std::optional
контейнером в этом отношении.
Если у вас под рукой нет компилятора, совместимого с C ++ 17, вы можете использовать вместо него boost.optional . Некоторые компиляторы до C ++ 17 также предлагают std::experimental::optional
, который будет вести себя как минимум близко к фактическому std::optional
afaik. Подробности смотрите в руководстве к вашему компилятору.