Могу ли я сохранить nullptr в bool?

У меня есть функция, которая возвращает указатель на объект типа bool для данного имени. Если объект не найден, nullptr возвращается

Теперь я хотел бы установить переменную в значение возвращенного логического или ложного, если не найден. Могу ли я написать это так?

bool flag = *Get("name");

Это эквивалентно этой более длинной реализации?

bool *result = Get("name");
bool flag = result == nullptr ? false : *result;

0

Решение

Первое неверно, так как вы не можете разыменовать нулевой указатель.

Второе правильно, но упрощает:

bool flag = result && *result;

Если вы хотите избежать result переменная для каждого вызова, тогда сделайте это следующим образом:

bool istrue(bool const *result) {
return result && *result;
}

bool flag = istrue(Get("name"));
2

Другие решения

Нет, это не эквивалентно. В первом случае, если ваш метод возвращает nullptr, вы, вероятно, получите ошибку во время выполнения.

2

Это не эквивалентно. В первом случае вы пытаетесь разыменовать nullptr который потерпит крах, в то время как во второй вы сначала делаете правильную проверку.

2

Если я правильно понимаю, вы хотите что-то, что может быть nullptr, true или же false,

Буст-библиотеки (www.boost.org) имеют optional класс, который вы могли бы использовать:

boost::optional<bool> foo;

Это позволяет вам проверять на ничтожность, используя if (!foo)и если обратное верно, то вы используете * восстановить логическое значение.

2

Два не эквивалентны. Первая реализация вызовет ошибку сегментации (поскольку вы будете пытаться разыменовать нулевой указатель).

Второй вариант верен.

1
По вопросам рекламы [email protected]