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


Устаревшая форма явного преобразования


Операторы явного преобразования типов, представленные в предыдущем разделе, появились только в стандарте С++; раньше использовалась форма, теперь считающаяся устаревшей. Хотя стандарт допускает и эту форму, мы настоятельно не рекомендуем ею пользоваться. (Только если ваш компилятор не поддерживает новый вариант.)

Устаревшая форма явного преобразования имеет два вида:

// появившийся в C++ вид

type (expr);

// вид, существовавший в C

(type) expr;

и может применяться вместо операторов static_cast, const_cast и reinterpret_cast.

Вот несколько примеров такого использования:

const char *pc = (const char*) pcom;

int ival = (int) 3.14159;

extern char *rewrite_str( char* );

char *pc2 = rewrite_str( (char*) pc );

int addr_va1ue = int( &iva1 );



Эта форма сохранена в стандарте С++ только для обеспечения обратной совместимости с программами, написанными для С и предыдущих версий С++.

Упражнение 4.21

Даны определения переменных:

char cval; int ival;

float fval; double dva1;

unsigned int ui;

Какие неявные преобразования типов будут выполнены?

(a) cva1 = 'a' + 3;

(b) fval = ui - ival *  1.0;

(c) dva1 = ui * fval;

(d) cva1 = ival + fvat + dva1;

Упражнение 4.22

Даны определения переменных:

void *pv;          int ival;

char *pc;          double dval;

const string *ps;

Перепишите следующие выражения, используя операторы явного преобразования типов:

(a)        pv = (void*)ps;

(b)        ival = int( *pc );

(c)        pv = &dva1;

(d)        pc = (char*) pv;



Содержание раздела