НазадОглавлениеДалее

4.7.2. Явные преобразования типов

Явное преобразование типа может быть выполнено посредством операции приведения типа. Она имеет следующую синтаксическую форму
(<абстрактное-имя-типа>)<операнд>
<абстрактное-имя-типа> - специфицирует некоторый тип; <операнд> - выражение, значение которого должно быть преобразовано к специфицированному типу (абстрактные имена типов рассмотрены в разделе 3.8.3).

Преобразование операнда осуществляется так, как если бы он присваивался переменной типа <имя-типа>. Правила преобразования для операции присваивания, приведенные в разделе 4.7.1, полностью действуют для операции приведения типа. Однако, преобразование к типу char или short выполняется как преобразование к int, а преобразование к типу float - как преобразование к double.

Имя типа void может быть использовано в операции приведения типа, но результирующее выражение не может быть присвоено никакому объекту, и ему также нельзя ничего присвоить. Значение типа void не может быть приведено ни к какому типу; например, результат функции, возвращающей void, не может быть присвоен.

Результат операции приведения типа L-выражения сам является L-выражением и может представлять левый (или единственный) операнд операции присваивания, если приведенный тип не превышает по размеру исходный тип.

Если объявлен указатель на функцию, то в приведении его типа можно задавать другие типы аргументов. Например:
int(*p)(long); /*объявление указателя на функцию*/
(*(int(*)(int))p)(0); /*вызов функции по указателю*/

В операции приведения типа можно также задавать объявление структурного типа (тега), например:
(struct{int a; int b;} *) р->а=5;

Область действия этого тега распространяется в СП MSC на остаток блока, а в СП ТС - на остаток тела функции.


НазадОглавлениеДалее