преобразование оценки короткого замыкания в оценку без короткого замыкания

0

Я должен переписать этот сегмент кода, который предполагает оценку коротких замыканий булевых выражений:

while ((p!=NULL) && (p->val != v)) p=p->next;

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

Я искал в Интернете, но все, что я получаю, - это различия между эмиссией короткого замыкания и некой короткой цепью, но я не могу ничего найти при переписывании того или другого, чтобы заставить их делать то же самое. Это для экзамена (не домашнее задание), поэтому было бы очень полезно, чтобы кто-то решил его, чтобы я знал, как это сделать для простого кода. Объяснения приветствуются :-)

  • 0
    Какой язык ? (Пожалуйста, добавьте подходящий тег.) А что вы уже пробовали?
  • 0
    это не сказал. Я думаю, C ++. Я не знал, что пометить, так как я в основном разместил вопрос слово в слово И я не очень старался. Я не очень понимаю, как я мог получить ту же задачу. Я начал с того, как (р) {.
Теги:
boolean
evaluation

2 ответа

2
Лучший ответ
while(true)
{
    if (p == NULL)
        break;
    if (p->val == v)
        break;
    p = p->next;
}

Некоторое объяснение: исходный код основан на оценке короткого замыкания. p->val != v не оценивается, если p!=NULL оценивает значение false. Если он всегда будет оценивать второе выражение, это может привести к нарушению доступа. Если вы не работаете с короткозамкнутым оператором &&, вам необходимо убедиться в том, что код p->val оценивается только в том случае, если p!=NULL.

  • 0
    Спасибо, я ценю это. И спасибо за объяснение тоже!
0

Вам просто нужно разделить чек на NULL и получить доступ к члену p в два оператора.

Оценка короткого замыкания означает, что в условном выражении И, если первый операнд является ложным, код не проверяет вторую, поскольку он уже знает, что результат "ложный".

Я бы сказал:

val = null;
while (p != null && val != v)
{
    p = p->next();
    val = p->val;
}
  • 0
    Вы не избавились от оценки короткого замыкания, так как у вас все еще есть && .
  • 0
    Нет, я избавился от опоры на предположение, что оно существует. Код больше не будет нарушаться, если оценка короткого замыкания не используется, что, я считаю, было смыслом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню