В тех случаях, когда переменные различающихся типов смешиваются в выражении, они преобразуются к одному типу. Прежде всего все значения char и short int автоматически повышаются до int. Далее, все операнды повышаются до самого высокого типа, участвующего в выражении. Повышение типа осуществляется по мере выполнения последовательных операций. Например, если один операнд имеет тип int, а другой - long int, тип int повышается до long int. Или если любой из операндов имеет тип double, другой операнд повышается до double. Таким образом, преобразование, например, из char в double вполне допустимо. После выполнения преобразования каждая пара операндов будет иметь один и тот же тип, и тип результата каждой операции будет совпадать с типом обоих операндов.
Как уже упоминалось, значения типа bool, в случае их использования в целочисленных выражениях, автоматически преобразуются в целые 0 или 1. Когда целочисленный результат преобразуется в тип bool, 0 превращается в false, а любое ненулевое значение - в true. Хотя тип bool является относительно недавним добавлением в С++, его автоматические преобразования в целые или из целых означают, что наличие bool не отражается на старых кодах. Кроме того, автоматические преобразования позволяют С++ сохранять исходные определения истины и лжи как нулевого и ненулевого значения.
В С++ предусмотрена возможность принудительного присваивания выражению конкретного типа с помощью конструкции, называемой приведением типа. В С++ определены пять видов приведений. Четыре из них дают пользователю возможность полного контроля над приведением; они будут рассмотрены в книге после введения понятия объектов. Однако имеется еще один вид приведения, который можно рассмотреть и использовать уже сейчас. Этот вид является наиболее общим, так как он позволяет преобразовать любой тип в любой другой. Он, кстати, является единственным видом приведения, который поддерживался ранними версиями С++. Общая форма этой конструкции приведения такова:
(тип) выражение
Здесь тип - это тип-мишень, в который требуется преобразовать выражение. Если, например, вы хотите удостовериться, что выражение х/2 при вычислении дает тип float, вы должны написать:
(float) х / 2;
Приведения считаются операторами. В качестве оператора приведение является одноместным (унарным) и имеет тот же относительный приоритет, что и любой другой одноместный оператор.