приведення типу
Матеріал з Seo Wiki - Пошукова Оптимізація і Програмування
Приведення типу (type conversion) - перетворення значення змінної одного типу в значення іншого типу. Виділяють явне і неявне приведення типів.
- При явному приведення вказується тип змінної, до якого необхідно перетворити вихідну змінну.
- При неявному приведення перетворення відбувається автоматично, за правилами, закладеним в даній мові програмування.
- Також в мові можуть бути задані спеціальні функції для приведення
Неявне приведення типу
Саме приведення відбувається як під час надання значення змінної, так і при операціях порівняння, обчислення виразу. При використанні в вираженні кілька різних типів значення одного або декількох підтипів може бути здійснено перетворення до більш загального типу (супертіпа), з великим діапазоном можливих значень.
Кожен раз при виконанні операції порівняння або привласнення змінні різних типів будуть приведені до єдиного типу. Слід з обережністю використовувати неявне приведення типу. При перекладі числа з дійсного типу в цілочисельний, дрібна частина відкидається. Зворотне приведення з целочисленного типу до матеріального також може привести до зниження точності, що пов'язано з різним поданням речових і цілочисельних чисел на машинному рівні. Наприклад, дійсний тип single стандарту IEEE 754 не може точно уявити число 16777217, в той час як 32-бітний цілочисельний тип може. Це може привести до ситуацій, коли порівняння на рівність одного і того ж числа, представленого типами (int і single) буде видавати помилковий результат (числа не рівні один одному).
Явна приведення типу
Для явного приведення типів деякої змінної перед нею слід вказати в круглих дужках ім'я нового типу, наприклад:
int X; int Y = 200; char C = 30; X = (int) C * 10 + Y; // змінна З приведена до типу int.
Якби в цьому прикладі не було виконано явне приведення типів, то компілятор припустив би, що вираз С * 10 + У змінної Х було б присвоєно значення 640, а не коректне 3200. В результаті приведення типу змінна С розпізнається компілятором як 16-ти розрядна , і описаної вище помилки не виникає.
У мові C ++
У мові C ++ існує чотири різновиди приведення типу. Всі чотири типи записуються у вигляді
Громіздкі ключові слова є нагадуванням програмісту, що приведення типу може спричинити проблеми.
static_cast- Призначення: Приведення типу за звичайними правилами, коли компілятор відмовляється привести його автоматично (відрізняється від застосовуваного в Сі (type_to) expression_from тільки тим, що з покажчиками не працює; для покажчиків застосовується reinterpret_cast). застосовується:
- для числових типів;
- для покажчиків і посилань при конвертації в батьківський тип;
- для типів з конструкторами або операціями конвертації на зразок operator type_to;
- в шаблонах - компілятор вже при спеціалізації шаблону вирішує, які операції використовувати;
- в операції. у якій then - і else -частини повинні мати один тип.
- Обмеження на expression_from. немає.
- Обмеження на type_to. повинен знайтися спосіб перетворення в type_to.
- Виробляє чи код: в загальному випадку так.
- Можливі помилки: відносно безпечно. Логічні помилки можливі, якщо привести в неправильний тип або взагалі пропустити приведення, коли воно потрібне. Не виключено, що після перетворення з'явиться тимчасовий об'єкт. який буде благополучно знищений разом з усіма змінами.
- Призначення: Ділянка пам'яті розглядається як об'єкт іншого типу.
- Обмеження на expression_from. інтегральний тип (логічні, символьні, цілі типи), покажчик.
- Обмеження на type_to. інтегральний тип (логічні, символьні, цілі типи), покажчик.
- Виробляє чи код: немає.
- Можливі помилки: Ділянка в реальності може і не мати цього типу. Немає ніякої можливості перевірити це, всю відповідальність за коректність перетворення програміст бере на себе.