Я все еще изучаю 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
более читабельно, и хороший компилятор при разумном уровне оптимизации будет генерировать те же инструкции.