Я все еще изучаю C++, а это значит, что я совсем новичок. И я слежу за плейлистом Cherno Cpp на YouTube.
Вот пример кода того, что я пытаюсь сделать.
#include <iostream>
// teranry operators
static unsigned int level = 1;
static unsigned int speed = 5;
int main() {
speed = level < 5 ? 10 : 5;
std::string rank = level < 10 ? "Newbie" : //rest of the code (should be an else if statement here).
std::cin.get();
}
У меня такое ощущение, что мне обычно следует просто ввести оператор else if, но было бы очень полезно, если бы я действительно мог использовать тернарный оператор в этой ситуации.
Технически вне тернарных операторов нет оператора else if, поэтому немного странно искать его в них... (Вы можете написать оператор if сразу после ключевого слова else, и некоторые люди будут называть результат «иначе если», но синтаксис языка этого не распознает. Это просто предложение else, которое является еще одним оператором if.)
«Я слежу за плейлистом Cherno Cpp на YouTube...» Я думаю, что хорошая книга по C++ будет лучше, чем обучающие видеоролики. В частности, «C++ Primer by Lippman 5th edition» — лучшая книга по C++ для начинающих. Учебники Yt не являются хорошим источником для изучения C++.
Другими хорошими источниками для изучения cpp являются «Learncpp.com», «cppreference.com» и «основные рекомендации C++», возможно, вы захотите их просмотреть.





В тернарных операторах C++ нет версии else if, но вы можете вкладывать их таким образом, чтобы это соответствовало этому формату.
variable = <condition 1> ? <val 1> : <condition 2> ? <val 2> : <val 3>
что эквивалентно
if (<condition 1>) {
variable = <val 1>;
} else if (<condition 2>) {
variable = <val 2>;
} else {
variable = <val 3>;
}
В вашем примере это будет выглядеть примерно так
#include <iostream>
static unsigned int level = 19;
static unsigned int speed = 5;
int main()
{
speed = level < 5 ? 10 : 5;
std::string rank = level < 10 ? "Newbie" :
level < 20 ? "Crook" :
level < 30 ? "Boss" : "Mafia Boss";
std::cout << rank << std::endl;
return 0;
}
Вы можете это сделать, но из-за этого код будет очень трудно читать. Если бы я увидел это в обзоре кода, я бы попросил вас изменить его.
Спасибо! Это было действительно полезно
@ John3136 John3136 Я согласен. Возможно, лучше использовать if else вместо этого
@JaMiT ты прав. Я добавил разрывы строк, чтобы было удобнее читать.
Вы можете вложить тройные операторы и усложнить чтение:
(a < b) ? ((c > d) ? "yes" : "no") : (e == f) ? "apple" : "humming bird"(проверьте скобки). В большинстве случаев использование тернарного оператора ничего не дает. Использование оператораifболее читабельно, и хороший компилятор при разумном уровне оптимизации будет генерировать те же инструкции.