Это безопасный способ реализации обработки ошибок?

Сегодня я видел пример кода, где обработка ошибок выполняется путем проверки, работает ли присвоение указателю. Я думаю, что если бы этого не произошло, он вернул бы false …

Мой вопрос это всегда будет работать? Не лучше ли просто проверить, nullptr?

bool pop (Node *&stack, int *data){

Node *elem;
if (!(elem = stack)) return false;  // isn't it better to say if (!stack)?

*data = elem->data;
stack = elem->next;

delete elem;
return true;

}

Постскриптум Этот код в основном является реализацией для pop функция в стеке, реализованная с использованием структуры связанного списка Node,

0

Решение

Заявление elem = stack также является выражением, и значение этого выражения является значением, назначенным для elem и не было ли назначение успешным. Так и есть, !(elem = stack) это правда, если stack ноль, потому что elem будет назначено значение stack даже если это ноль. У этого также есть побочный эффект назначения значения stack к переменной elem,

Вот почему код, как max = min = current; используется, это означает, max = (min = current);, Это, в свою очередь, на простом английском языке будет выглядеть так: назначить значение выражения min = current к переменной max, Оценка (min=current) сам по себе дает побочный эффект от назначения current в min, По сути, все эквивалентно min=current; max=current;

2

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

Других решений пока нет …

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