КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Преобразования базовых типов
В выражение могут входить операнды различных типов. Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. Если операнды разного типа, перед вычислениями автоматически выполняются неявные преобразования типов. Обычно короткие типы приводятся к более длинным, что обеспечивает сохранение значимости и точности: (char, short) -> int -> unsigned int -> long -> unsigned long -> float -> double -> long doubleЭто не означает, что преобразование типа int в double выполняется последовательно по цепочке, просто менее "объемный" тип преобразуется к более "объемному". Типы char и short перед выполнением операции обязательно преобразуются к int. Типом результата выражения обычно является самый "объемный" из типов операндов. Однако в выражениях с операцией присваивания встречается и обратный вариант, когда более "объемный" тип присваивается менее "объемному", например, float в int. Подобные преобразования связаны с потерей информации (дробная часть отбрасывается), поэтому называются сужающими приведениями (преобразованиями). Компилятор предупреждает о таких операциях. В логических операциях и условной операции выполняется неявное преобразование к типу bool. При этом любое значение, не равное нулю (даже отрицательное), трактуется как true, а нуль считается false. При обратных преобразованиях величин типа bool к целому типу значение true преобразуется в целую константу 1, а значение false - в 0. Программист может задать явное преобразование типа. Операция преобразования типа (часто называемая приведением типа) в стиле С может записываться в двух эквивалентных формах: (тип) выражениетип (выражение) Результатом операции является значение заданного типа, например: int a = 2;float b = 6.8;printf("%lf %d", double (a), (int) b);Величина a преобразуется к типу double, а переменная b - к типу int с отсечением дробной части (сужающее приведение). Явное преобразование типа в стиле С оставлено в С++ только для совместимости. Использовать его не рекомендуется, поскольку оно слишком универсально, а потому чревато плохо диагностируемыми ошибками. В стандарте С++ определено четыре специализированных операций преобразования типа, которые не являются взаимозаменяемыми и применяются в разных ситуациях: В зависимости от вида преобразования необходимо использовать соответствующую ему операцию приведения типа. Приведение типа static_cast<T>(e) используется между родственными типами. Его может проверить компилятор. Операция reinterpret_cast выполняет преобразование типов без проверки при компиляции. Оно часто необходимо тогда, когда точно известно, что объекты разных типов занимают в памяти одинаковое количество байт и фактического преобразования делать как раз не нужно. Операция const_cast аннулирует действие модификатора const и применяется достаточно редко. Операция dynamic_cast выполняет преобразование во время работы программы и применяется для преобразования указателей и ссылок родственных полиморфных классов. Примеры применения этих операций вы увидите в следующих лекциях.
Дата добавления: 2014-01-20; Просмотров: 301; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |