В одном из проектов нашёл забавный фрагмент кода, содержащий ошибку. На эту ошибку обратил внимание анализатор PVS-Studio. Но я вначале ему не поверил. Мне показалось, что анализатор ошибся и уже подумал о том, чтобы запустить отладчик. Присмотрелся чуть внимательнее. А нет, действительно ошибка!
Я немного изменил код и, используя ICQ, отослал пример четырём знакомым программистам. И попросил написать, что напечатает код приведённый ниже. Все четверо дали вначале неправильные ответы.
Предлагаю попробовать, сможете ли вы дать правильный ответ. Что печатает на экране этот код?
cout << (sizeof(char *) == 8) ? "64-bit" : "32-bit";
Длинным вступлением я, конечно, насторожил читателя. И скорее всего вы нашли правильный ответ.
Этот код распечатает единицу или ноль. Вначале вычисляется выражение в скобках. В зависимости от режима компиляции, вы получите true или false. Следующая операция, которая выполнится, это вызов перегруженного оператора <<. В результате, на экране появится число 0 или 1.
Далее, объект типа ostream будет неявно приведён к типу bool. И наконец, выполнится оператор тернарный оператор '? :'. Но это действие ничего не делает.