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


         

Другой причиной использования явного преобразования


void mumble 0 {

    // правильно: программа по-прежнему содержит ошибку,

    // но теперь она компилируется!

    // Прежде всего нужно проверить

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

    pc = static_cast< char* >( pv );

    char *pstr = new char[ str1en( pc )+1 ];

    // скорее всего приведет к краху

    strcpy( pstr, pc );

}

Другой причиной использования явного преобразования типов может служить необходимость избежать стандартного преобразования или выполнить вместо него собственное. Например, в следующем выражении ival сначала преобразуется в double, потом к нему прибавляется dval, и затем результат снова трансформируется в int.

double dval;

int iva1;

ival += dval;

Можно уйти от ненужного преобразования, явно заменив dval на int:

ival += static_cast< int >( dval );

Третьей причиной является желание избежать неоднозначных ситуаций, в которых возможно несколько вариантов применения правил преобразования по умолчанию. (Мы рассмотрим этот случай в главе 9, когда будем говорить о перегруженных функциях.)

Синтаксис операции явного преобразования типов таков:

cast-name< type >( expression );

Здесь cast-name – одно из ключевых слов static_cast, const_cast, dynamic_cast или reinterpret_cast, а type – тип, к которому приводится выражение expression.

Четыре вида явного преобразования введены для того, чтобы учесть все возможные формы приведения типов. Так const_cast служит для трансформации константного типа в неконстантный и подвижного (volatile) – в неподвижный. Например:

extern char *string_copy( char* );

const char *pc_str;

char *pc = string_copy( const_cast< char* >( pc_str ));

Любое иное использование const_cast вызывает ошибку компиляции, как и попытка подобного приведения с помощью любого из трех других операторов.

С применением static_cast осуществляются те преобразования, которые могут быть сделаны неявно, на основе правил по умолчанию:

double d = 97.0;

char ch = static_cast< char >( d );


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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий