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