Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






название_ cast <целевой тип> операнд





dynamic_cast - операция приведения типа с проверкой допустимости на этапе выполнения программы;

static_cast – операция приведения типов с проверкой допустимости приведения во время компиляции;

reinterpret_cast – операция приведения типов без проверки допустимости приведения;

const_cast – операция приведения типов, которая аннулирует действие модификатора const.

Приведенным выше примерам соответствуют следующие выражения:

static_cast <unsigned long>(15/2); и static_ cast <char*>(0777);

При преобразовании типов существуют некоторые ограничения. Но прежде чем остановиться на них, рассмотрим стандартные преобразования типов, выполняемые по умолчанию.

Стандартные преобразования типов

При вычислении выражений операции требуют, чтобы операнды имели соответствующий тип, а если требования не выполнены, производится неявное приведение типа.

Неявное приведение типов происходит при инициализации, когда тип инициализирующего выражения приводится к типу определяемого объекта. То же относится ко всем формам операции присваивания, происходит неявное преобразование типа выражения к типу левого объекта. Реально типы могут преобразовываться один в другой многими способами. Рассмотрит на данном этапе лишь некоторые из них. Преобразования типов, выполняемые неявно:

· преобразования в логические значения: в значения типа bool преобразуются обобщенные целые числа (включая и символы), вещественные числа и указатели; ненулевые значения преобразуются в true, а нулевые - в false;

· преобразование указателей:

любой указатель может быть неявно преобразован в void*;

значение 0 преобразуется в любой указательный тип;

неконстантный указатель преобразуется в константный указатель того же типа.

· преобразование операндов в арифметических выражениях

Последнее преобразование рассмотрим подробнее. При преобразовании нужно различать преобразования, изменяющие внутреннее представление данных и преобразования, изменяющие только интерпретацию внутреннего представления. Например, при преобразовании unsigned int в int изменяется только интерпретация внутреннего представления. При преобразовании double в int изменяется как длина участка памяти для внутреннего представления, так и способ кодировки. При таком преобразовании возможен выход за диапазон допустимых значений типа int, потеря значимости, точности и так далее. Именно поэтому в программах рекомендуется с осторожностью применять преобразования типов.

В арифметических выражениях происходит автоматическое преобразование типа операндов к общему типу – наиболее высокому типу согласно иерархии типов. Преобразование происходит по схеме, изображенной на рис.3:

long double


doubl float

 
 


unsigned long int

long int char

 
 


unsigned int unsigned shot unsigned char

Рис.3. Схема последовательных преобразований типов операндов

Преобразования, гарантирующие сохранение значимости.

Используя в программе арифметические выражения, следует учитывать, что некоторые из них приводят к потерям информации и изменению числового значения. На рис.4 в соответствии со стандартом языка С++ представлены стрелочками преобразования, гарантирующие сохранение точности и неизменность числового значения.

           
   
   


Рис.4. Последовательности преобразований типов, гарантирующие сохранение значимости

 

Date: 2015-07-17; view: 368; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию