Итак, у меня есть функция, возвращающая целое число вместе с некоторым максимальным и минимальным значением для него. Я хотел сделать это с красивым и чистым однострочником в конце:
(freq>max_freq) ? return max_freq : ((freq<min_freq) ? return min_freq : return freq);
Но то, что я получаю это
posplot.hh:238:21: error: expected primary-expression before ‘return’
(freq>max_freq) ? return max_freq : ((freq<min_freq) ? return min_freq : return freq);}
^
posplot.hh:238:21: error: expected ‘:’ before ‘return’
posplot.hh:238:21: error: expected primary-expression before ‘return’
posplot.hh:238:21: error: expected ‘;’ before ‘return’
Итак, это потому, что использовать return здесь - глупая вещь, и я должен сделать это как-то иначе, или это может сработать, но я облажался? Мне очень любопытно, потому что, кажется, я использовал '?' оператор как более аккуратный if-else для многих вещей, и он всегда работал нормально. Может кто-нибудь объяснить, почему это происходит?
3 ответа
Вам нужно переместить return до тернарных операторов:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);
Обычно ожидается, что тернарный оператор будет оценивать одно значение в каждой ветви (что означает, что это должно быть 3 выражения , и вы создаете одно выражение и два оператора , поскольку return
создает инструкцию).
? Оператор можно использовать в выражениях. возврат - это заявление
Ваша однострочная строка может выглядеть так:
return (freq>max_freq ? max_freq : (freq<min_freq ? min_freq : freq));
Операнды условного оператора (как и большинство других операторов) должны быть выражениями , а не операторами , поэтому они не могут быть операторами возврата.
Само условное выражение имеет значение: значение выбранного операнда. Оцените это и верните:
return (freq>max_freq) ? max_freq : ((freq<min_freq) ? min_freq : freq);
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.