Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

polevoy_cpp_2012_spring_lecture_09

.pdf
Скачиваний:
9
Добавлен:
20.04.2015
Размер:
125.84 Кб
Скачать

Выбор типа

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