приведення типу

Матеріал з 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.
  • Виробляє чи код: в загальному випадку так.
  • Можливі помилки: відносно безпечно. Логічні помилки можливі, якщо привести в неправильний тип або взагалі пропустити приведення, коли воно потрібне. Не виключено, що після перетворення з'явиться тимчасовий об'єкт. який буде благополучно знищений разом з усіма змінами.
reinterpret_cast
  • Призначення: Ділянка пам'яті розглядається як об'єкт іншого типу.
  • Обмеження на expression_from. інтегральний тип (логічні, символьні, цілі типи), покажчик.
  • Обмеження на type_to. інтегральний тип (логічні, символьні, цілі типи), покажчик.
  • Виробляє чи код: немає.
  • Можливі помилки: Ділянка в реальності може і не мати цього типу. Немає ніякої можливості перевірити це, всю відповідальність за коректність перетворення програміст бере на себе.

Схожі статті