В выражениях есть два типа преобразования типов:
Неявные и явные преобразования.
1. Неявное преобразование
Арифметические операторы, операторы отношения, логические операторы, побитовые операторы и операторы присваивания — это бинарные операторы, для которых требуется одинаковый тип двух операндов.
В арифметических операциях и реляционных операциях, если типы операндов, участвующих в операции, несовместимы, система компиляции произведет автоматическое преобразование данных, то есть неявное преобразование.
Основы: преобразование данных низкого типа в данные высокого типа.
Низкий --------------------> Высокий
char короткое целое без знака
длинное беззнаковое длинное число с плавающей запятой
двойной
Логические операторы требуют, чтобы операнды, участвующие в операции, были типа bool, если нет, то
Ненулевые данные преобразуются в истинные, 0 преобразуются в ложные.
Операнды битовых операций должны быть целыми числами, а когда целые типы операндов бинарных операций различны, преобразование выполняется неявно.
Операция присваивания требует, чтобы типы lvalue и rvalue были одинаковыми, и система компиляции автоматически выполнит преобразование типов, но правило состоит в том, чтобы всегда преобразовывать rvalue в тип lvalue.
поплавок fVal;
двойной вал;
интервал iVal;
беззнаковый длинный ulVal;
dVal=iVal*uVal;//iVal преобразуется в unsigned long,
//Результат операции умножения преобразуется в double
dVal=ulVal+fVal;//ulVal преобразуется в число с плавающей запятой,
//Результат операции сложения преобразуется в double
2. Отображение переходов
Эффект преобразования типа отображения заключается в преобразовании типа результата выражения в другой указанный тип.
(1)
спецификатор типа (выражение)
(спецификатор типа) выражение
Вышеуказанные две формы различны, но функция одна и та же.
пример:
float z = 7,56, дробная часть;
целая часть;
wholePart=int(z);//При преобразовании типа float в тип int
// Берем целую часть и отбрасываем десятичную часть
FractionPart=z-(int)z;//вычтем из z целую часть,
// получаем десятичную часть
(2)
4 типа операторов преобразования:
static_cast, dynamic_cast,
const_cast, переинтерпретировать_cast
Грамматическая форма:
dynamic_cast<спецификатор типа>(выражение)
const_casy<спецификатор типа>(выражение)
reinterpret_cast<спецификатор типа>(выражение)
static_cast<спецификатор типа>(выражение)
Последние три типа функций могут быть описаны грамматикой (1).
static_cast подходит для преобразования между базовыми типами данных, например, int(z) и (int)z в приведенном выше примере можно заменить на static_cast<int>(z)
Уведомление:
Явные преобразования типов могут быть небезопасными (потеря точности)
Этот переход временный, разовый
---------- Заметки по изучению языка C++----------