Устаревшая форма явного преобразования
Операторы явного преобразования типов, представленные в предыдущем разделе, появились только в стандарте С++; раньше использовалась форма, теперь считающаяся устаревшей. Хотя стандарт допускает и эту форму, мы настоятельно не рекомендуем ею пользоваться. (Только если ваш компилятор не поддерживает новый вариант.)
Устаревшая форма явного преобразования имеет два вида:
// появившийся в 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;