Другие языки программирования и технологии

С++ почему в тернарном операторе..

обязательно всегда нужно указывать двоеточие и условие, а потом уже только можно закрыть строку точкой с запятой.
а == b? cout << "test" << endl : cout << "crash"; - работает
а == b? cout << "test" << endl; - не работает (пишет нет : знака)
а == b? cout << "test" << endl : ; - то же не работает
мне казалось что это аналогия if else, но if можно без else писать, а тернарный оператор не позволяет, почему?
Yatko Veyla
Yatko Veyla
5 543
Действительно, таков синтаксис языка. Однако, ты можешь "дописать" компилятор добавив в него услвия для "понимания" твоей записи. Gcc, clang с открытыми исходниками, дерзай))
Тернарный - терно, оно же трио ...Говорит о том что мы работаем с тремя параметрами (условие? условие верно: условие ложно;). На более низком уровне Это и в правду аналог if. Но правила его написания таковы, что нужно описать оба варианта :) иногда удобнее if
Ан
Андрей
4 332
Лучший ответ
Потому что простой if не обязан выдавать результат, а операция, даже тернарная - обязана. Поэтому в ней обязателен аналог else.
Потому что ТЕРНАРНЫЙ в имени содержит правила использования

PS: И вообще-то его обычно применяют не как замену if, а так:

cout<< а == b? "test\n" : "crash";
ну или
cout<< а == b? "test\n" : "";

Поскольку результатом выполнения тернарного оператора является lvalue
например можно даже так
(a==b? a: b)=40;
Бауржан Абдрахманов вот он гений хочет чтоб синтаксис работал так как он хочет)
Чувак, ты удивишься, насколько разнообразен С/C++. И насколько разными способами можно описать одно и то же. Кто-то делает все циклы через for(), а кто-то любит while(). Например, кто-то любит if-else, кто-то тернарный оператор, а кто-то вообще короткий switch. Кто-то любит маски, а кто-то битовые поля и т. п.
Владимир Гудин
Владимир Гудин
26 548
Просто есть правила написания кода и он называется синтаксисом наверно и его нельзя нарушать, если ты его нарушишь компилятор покажет ошибку)

но есть такие моменты как
for(int i = 0; i < 10; i++)
можно и по другому это же записать например for(i; x; b++)
но это по правилам просто другой вид записи)

есть наверно просто разные виды записи, но правила нарушить нельзя невозможно просто не то чтобы нельзя компилятор просто покажет ошибку и все.
Комментариев уже нету, так что дальше продолжить дискутировать не смогу. Спасибо, за приятное общение, с умным человеком)
Yatko Veyla всегда пожалуйста :)