Перетворення типу
Компілятор Паскаля виконує автоматичне перетворення типів даних, особливо в математичних виразах, коли найчастіше цілочисельний тип перетворюється у тип з плаваючою комою. Цей стиль підтримує і С++, причому значення типу char та int в арифметичних виразах змішуються: кожний з таких символів автоматично перетворюється в ціле. Взагалі, якщо операнди мають різні типи, перед тим, як виконати операцію, молодший тип "підтягується" до старшого. Результат - старшого типу:
- char та short перетворюються в int;
- float перетворюється в double;
- якщо один з операндів long double, то і другий перетворюється в long double;
- якщо один з операндів long, тоді другий перетворюється відповідно до того ж типу, і результат буде long;
- якщо один з операндів unsigned, тоді другий перетворюється відповідно до того ж типу, і результат буде unsigned.
Приклад 1. Перетворення типів.
double ft, sd;
unsigned char ch;
unsigned long in;
int i;
/* ... */
sd = ft*(i+ch/in);
При виконанні оператора присвоювання в даному прикладі правила перетворення типів будуть використані наступним чином. Операнд ch перетворюється до unsigned int. Після цього він перетворюється до типу unsigned long. За цим же принципом і перетворюється до unsigned long і результат операції, що розміщена в круглих дужках буде мати тип unsigned long. Потім він перетворюється до типу double і результат всього виразу буде мати тип double.
Взагалі, тип результату кожної арифметичної операції виразу є тип того операнду, який має у відповідності більш високий тип приведення. Але, окрім цього в С++, з'являється можливість і примусового перетворення типу, щоб дозволити явно конвертувати (перетворювати) значення одного типу даних в інший. Загальний синтаксис перетворення типу має два варіанти :
-. (новий_тип) вираз ;
-. новий_тип (вираз) ;.
Обидва варіанти перетворення виглядають так:
сhar letter = 'a';
int nasc = int (letter);
long iasc = (long) letter;.