оператор" if " в 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 вместо исключения с плавающей запятой.
2 ответа:
Деление на ноль-это неопределенное поведение. Все может случиться.
Если второй операнд / или % равен нулю, то поведение не определено.
Деление на ноль не гарантирует, что каждый раз программа будет выдавать вам ошибку времени выполнения. вот почему деление на ноль является неопределенным поведением.
Как стандартные состояния C;
Результатом оператора / является частное от деления первого операнда на второй; результатом оператора % является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
Как для C++ (03-5.6.4);
Оператор binary / дает частное, а оператор binary % - остаток от деления от первого выражения ко второму. Если второй операнд / или % равен нулю, то поведение не определено; в противном случае (a/b)*b + a%b равно a. если оба операнда неотрицательны, то остаток неотрицателен; если нет, то знак остатка определяется реализацией