>
>
Что печатает этот код?

Андрей Карпов
Статей: 643

Что печатает этот код?

В одном из проектов нашёл забавный фрагмент кода, содержащий ошибку. На эту ошибку обратил внимание анализатор PVS-Studio. Но я вначале ему не поверил. Мне показалось, что анализатор ошибся и уже подумал о том, чтобы запустить отладчик. Присмотрелся чуть внимательнее. А нет, действительно ошибка!

Я немного изменил код и, используя ICQ, отослал пример четырём знакомым программистам. И попросил написать, что напечатает код приведённый ниже. Все четверо дали вначале неправильные ответы.

Предлагаю попробовать, сможете ли вы дать правильный ответ. Что печатает на экране этот код?

cout << (sizeof(char *) == 8) ? "64-bit" : "32-bit";

Длинным вступлением я, конечно, насторожил читателя. И скорее всего вы нашли правильный ответ.

Этот код распечатает единицу или ноль. Вначале вычисляется выражение в скобках. В зависимости от режима компиляции, вы получите true или false. Следующая операция, которая выполнится, это вызов перегруженного оператора <<. В результате, на экране появится число 0 или 1.

Далее, объект типа ostream будет неявно приведён к типу bool. И наконец, выполнится оператор тернарный оператор '? :'. Но это действие ничего не делает.