Я утверждаю, что система типов
и семантика С++ чище, чем
его синтаксис
Бьерн Страуструп
#include <iostream>
int main(int argc, char* argv[])
{
int a = +-+-+-+-+10;
int b = 5*-+-+a;
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
{
{
{
{
10;
std::cout << "Hello;)\n";
}
}
}
}
((a > 10)?a:b) = 100;
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << ((2 < 5)?a=1, b=2, a+b: 0) << std::endl;
(1 > 0)?0:throw 1;
try
{
(1 < 0)?0:throw 1;
}
catch( ... )
{
std::cout << "Exception;)\n";
}
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << !!!!!!!!!!!!1 << std::endl;
}
----------------------------------------------
Результата работы программы
----------------------------------------------
a = 10
b = 50
Hello;)
a = 10
b = 100
3
Exception;)
a = 1
b = 2
1
------------------------------------------------
Выражения с несколькими унарными знаками возможны согласно правилам:
выражение-приведения =>
унарное-выражение
унарное-выражение =>
унарный-оператор выражение-приведения
унарный-оператор =>
* & + - ! ~
Несколько вложенных "составных инструкций" возможны по
правилам:
инструкция =>
составная-инструкция
составная-инструкция =>
{ последовательность-инструкций }
последовательность-инструкций =>
инструкция
Приводить правила грамматики позволяющие строить с "условным выражением" такие конструкции я не буду, так как их много, если кому интересно смотрите, например в [1]. А следующее выражение допустимо, потому что оно выводима с помощью правил грамматики С++ и результат применения оператора к операнду lvalue является lvalue, если это приемлемо с точки зрения логики (lvalue - это выражение, ссылающееся на какую-то непрерывную область в памяти):
((a > 10)?a:b) = 100;
Например, на следующее выражение компилятор будет шибко ругаться, хотя оно и верно синтаксически, так как результат "логического ИЛИ" не есть lvalue:
(a || b) = 1;
Литература
1. Б. Страуструп. Язык программирования С++. Специальное издание.
2. Б. Страуструп. Дизайн и эволюция С++.