profile
Опубликовано 5 лет назад по предмету Информатика от KateVV1

C++
Почему не работает выражение

a==0 ? break:continue; ???? (внутри цикла)

  1. Ответ
    Ответ дан nelle987
    Тернарный оператор должен возвращать значение (или ссылку на переменную), которое потом можно использовать. Например, если в целочисленной переменной a записано число -3, то используя такой синтаксис:
    int absa = a >= 0 ? a : -a;
    можно присвоить переменной absa значение |-3| = 3.

    Выражения break, continue (и, например, return) управляют выполнением программы, показывая, какую инструкцию выполнять следующей, и не возвращают никакого значения (даже void). Поэтому при попытке использовать такие выражения в качестве аргументов тернарного оператора, ожидающего, что оба аргумента вернут какое-то значение, возникает ошибка компиляции.

    Если очень хочется использовать тернарный оператор для выхода из цикла (но зачем?) можно выбрасывать исключение, которое потом обрабатывать, например, так:
    try {
        int a = 5;
        while(true) {
            a == 0 ? throw "a equals 0" : (void) 0;
            a--;
        }
    } catch (char const* s) {
        if (s != "a equals 0") throw s;
    };
Самые новые вопросы