Синтаксический разбор выражения для собеседования

int main() { return !0'0.*-+!!""; }

Что возвращает данная программа и почему?


Ответы (1 шт):

Автор решения: zed

Происходит вот что:

int main() {

  return static_cast<int>(!0.0) * -+static_cast<int>(!!"");
}

0'0. - это число типа double, которое равно нулю. Символ ' можно использовать для разделения разрядов числа (добавлено в C++14), он игнорируется компилятором (cм. Floating point literal).

Далее, к этому числу применяется логическое отрицание, что даёт 1. Подробнее, про логическое отрицание над числом см. тут: What happens when you logical not a float?.

Далее, "" - пустая строка, к которой применяется операция двойного логического отрицания. И после приведения к int, получается 1.

Затем, выполняются унарные операции + и - для получившейся единицы, что в результате даёт -1.

Ну и наконец, выполняется произведение первой 1 и второй -1, в результате получаем всё ту же -1.

→ Ссылка