Проверка предопределенной роли и выполнение команды

Существует состояние, в котором объект может быть действительным, но неопределенным:

действительное, но неуказанное состояние [§ 17.3]

состояние объекта, которое не указано, за исключением того, что инварианты объекта выполняются, и операции над объектом ведут себя так, как указано для его типа

[ Пример: Если объект x типа std :: vector находится в действительном, но неуказанном состоянии , x.empty () можно назвать безоговорочно, а x.front () можно вызвать только в том случае, если x.empty () возвращает false. -end example ]

При чтении стандарта C ++ состояние data() не указывается, когда вектор пуст. Итак, состояние действительное, но неуказанное состояние . Поэтому возвращаемое значение data(), когда вектор пуст, может быть любым (нулевое или случайное значение). Это зависит от реализации компилятора.

В этом случае, следуя примеру в § 17.3, вы должны вызвать empty() перед использованием data(), чтобы убедиться, что возвращаемое значение является вашим ожиданием.

if (!v.empty())
   do_something(v.data())
0
задан Ragnar Lothbrok 31 December 2018 в 16:06
поделиться