
polevoy_cpp_2012_spring_lecture_09
.pdf
Выбор типа
•unsigned - массив битов
•signed – все остальное
•требуемая точность
•ограничения по использованию памяти
07.04.2012 |
cppNewb.ru |
41 |

Диапазоны арифметических типов
тип |
минимальный диапазон |
|
|
char |
[-128,127] или [0, 255] |
|
|
unsigned char |
[0, 255] |
|
|
signed char |
[-128, 127] |
|
|
int |
[-2^15, 2^15 - 1] |
|
|
unsigned int |
[0, 2^16] |
|
|
double |
10 значащих цифр |
|
|
wchar_t |
как unsigned int |
|
|
07.04.2012 |
cppNewb.ru |
42 |

Размеры арифметических типов
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
sizeof(float) <= sizeof(double) <= sizeof(long double)
sizeof(T) == sizeof(signed T) == sizeof(unsigned T)
07.04.2012 |
cppNewb.ru |
43 |

Неявные преобразования
•повышение
–bool -> int
–enum -> int или long
•обеспечение точности
–int + long
–int + double -> double
•усечение int n(f);
07.04.2012 |
cppNewb.ru |
44 |

Явные преобразования
static_cast<Тип>(выражение)
• преобразование родственных типов
пример:
int roundVal = static_cast<int>(doubleVal);
07.04.2012 |
cppNewb.ru |
45 |

Явные преобразования
const_cast<Тип>(выражение)
• изменение константности
пример:
char* pBeg = const_cast<char*>(p + n);
07.04.2012 |
cppNewb.ru |
46 |

Явные преобразования
reinterpret_cast<Тип>(выражение)
•трактовка битового представления
•обычно применяется к указателям
пример:
// void *p
char* pBeg = reinterpret_cast<char*>(p);
07.04.2012 |
cppNewb.ru |
47 |

Явные преобразования
dynamic_cast<Тип>(выражение)
•понижающее приведение
•0 – если не из одной иерархии
пример:
// class Child : public Parent
Child* pCh = dynamic_cast<Child*>(pParent);
07.04.2012 |
cppNewb.ru |
48 |

Преобразования в стиле С
• избегать использования
(Тип)выражение
или
Тип(выражение)
пример:
int roundVal = int(doubleVal + 0.5);
int roundVal = (int)doubleVal;
07.04.2012 |
cppNewb.ru |
49 |