оператор if в c ++ не оценивает условия слева направо - PullRequest
0 голосов
/ 03 октября 2018

Я имел в виду вопрос "" IF "порядок вычисления аргумента? " для понимания порядка вычисления оператора "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 ]

0 голосов
/ 03 октября 2018

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

в качестве стандартных состояний языка Си;

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

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

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

0 голосов
/ 03 октября 2018

Деление на ноль - неопределенное поведение.Может случиться что угодно.

[expr.mul] / 4

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

...