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

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

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

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

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

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

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

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