с ++ 11 — «если» оператор в C ++ не оценивает условия слева направо

Я имел в виду вопрос"ЕСЛИ" порядок оценки аргумента?«для понимания порядка вычисления оператора» if «в c ++.

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

#include <iostream>

using namespace std;

int main()
{
int t = 0;
if((1 / t) == 1 && t != 0)
{
cout << "0" << endl;
}

cout << "1" << endl;

return 0;
}

Результат — 1 вместо исключения с плавающей запятой.

6

Решение

Деление на ноль — неопределенное поведение. Все может случиться.

[Expr.mul] / 4

Если второй операнд / или% равен нулю, поведение не определено.

19

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

деление на ноль не гарантирует, что каждый раз, когда программа выдаст вам ошибку во время выполнения. Вот почему деление на ноль — неопределенное поведение.

как С стандартные состояния;

Результатом оператора / является частное от деления первого операнда на второй; результат оператора% — остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.

как для C ++ (03-5.6.4);

Двоичный / оператор дает частное, а бинарный оператор% — остаток от деления
первого выражения вторым. Если второй операнд / или% равен нулю, поведение не определено; иначе
(a / b) * b + a% b равно a. Если оба операнда неотрицательны, то остаток неотрицателен;
если нет, знак остатка определяется реализацией

6

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector