С++ для начинающих




Подробнее о стандартном преобразовании


Имеется пять видов стандартных преобразований, а именно:

1. преобразования целых типов: приведение от целого типа или перечисления к любому другому целому типу (исключая трансформации, которые выше были отнесены к категории расширения типов);

2.      преобразования типов с плавающей точкой: приведение от любого типа с плавающей точкой к любому другому типу с плавающей точкой (исключая трансформации, которые выше были отнесены к категории расширения типов);

3.      преобразования между целым типом и типом с плавающей точкой: приведение от любого типа с плавающей точкой к любому целому типу или наоборот;

4.      преобразования указателей: приведение целого значения 0 к типу указателя или трансформация указателя любого типа в тип void*;

5.      преобразования в тип bool: приведение от любого целого типа, типа с плавающей точкой, перечислимого типа или указательного типа к типу bool.

Вот несколько примеров:

extern void print( void* );

extern void print( double );

int main() {

   int i;

   print( i );   // соответствует print( double );

                 // i подвергается стандартному преобразованию из int в double

   print( &i );  // соответствует print( void* );

                 // &i подвергается стандартному преобразованию

                 // из int* в void*

   return 0;

}

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

int i;

void calc( float );

int main() {

   calc( i );   // стандартное преобразование между целым типом и типом с

                // плавающей точкой потенциально опасно в зависимости от

                // значения i




Содержание  Назад  Вперед