Инструменты пользователя

Инструменты сайта


examination:c:question9

Вопрос №9. Типы данных. Приведение типов.

Приведение типов – это преобразование значения переменных одного типа в значения другого типа. Различают явное и неявное приведение типов.

Неявное приведение (при неявном приведении преобразование типов происходит автоматически по правилам, заложенным в данном языке программирования; само приведение происходит при присваивании значения переменной, при операциях сравнения и вычислений выражения. При использовании в выражении нескольких различных типов значение одного или нескольких подтипов могут быть приведены к другому с большим диапазоном возможных значений).

Неявное приведение типов следует использовать с осторожностью, так как при этом может произойти потеря точности вычислений или неверное сравнение.

Явное приведение типов (при явном приведении указывается тип переменной, к которому необходимо преобразовать исходную переменную. Например, в языке си тип приведения необходимо указать в круглых скобках перед именем переменной z = (int) x * 10 + y; в языке с++ существует 4 разновидности явного приведения типов. Все они имеют вид xxx_cast< тип2 >(исходный))

  1. Static( xxx ) – используется для приведения типа по обычным правилам, когда компилятор не может привести тип автоматически; используется для числовых типов, для указателей и ссылок, при конвертации в родительский тип, в операции ( ) ? [ ] :[ ] , в случаях, когда действия выражения, выполняемые в случае истины [ ] и лжи [ ] должны иметь общий тип.

  2. Dynamic( xxx ) – проводит преобразование типа, только предварительно убедившись, что исходное выражение действительно объект, требуемого типа. Если проверка дает отрицательный результат, то для указателей операция возвращает значение 0, а для ссылок создает аварийную ситуацию std::bad_cast. Исходным выражением может быть только ссылка или указатель на объект, с хотя бы одной виртуальной функцией. Требуемым типом должны быть ссылка или указатель на дочерний тип по отношению к типу исходного выражения.

  3. Const( xxx ) – снятие или установка модификаторов const и volatile. Исходным выражением должна быть ссылка или указатель, а требуемый тип должен совпадать с типом исходного выражения с точностью до модификаторов const и volatile.

  4. Reinterpret( xxx ) используется для преобразования участка памяти.

examination/c/question9.txt · Последние изменения: 2014/01/15 12:10 (внешнее изменение)