Сказать «C-приведение - это плохо» - это крайность, которая сама по себе примерно так же плоха, как постоянное использование C-образного приведения.
Области, в которых следует использовать «новые» преобразования в стиле C ++: иерархические преобразования (повышающие, понижающие, перекрестные), преобразования с константной корректностью и преобразования с переинтерпретацией. Для арифметических приведений приведения в стиле C работают отлично и не представляют опасности, поэтому их можно безопасно использовать в коде C ++. Фактически, я бы действительно рекомендовал использовать в качестве арифметических преобразований только C-образные преобразования - просто чтобы арифметические преобразования выглядели иначе, чем другие типы преобразования.
static_cast - это просто приведение c, например. (целое) 1.000. это ничего не стоит и не может потерпеть неудачу. Но это единственное значение - синтаксический сахар (он полезен для поиска в редакторе)
reinterpret_cast - это эквивалент (void *) в C ++. Он может взорваться тебе в лицо. Используйте это, чтобы указать компилятору просто сделать это, а другим программистам - быть очень осторожными.
dynamic_cast - более безопасная версия, которая возвращает null, если преобразование не может быть выполнено. Это требует небольших затрат времени выполнения.
См. Также Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?
static_cast
- безопасное приведение. Это означает, что есть преобразование из TYPE2 в TYPE1.
reinterpret_cast
близок к приведению C в том смысле, что он допускает практически любое преобразование (с некоторыми ограничениями). Компилятор ожидает, что вы узнаете, что преобразование типа правильное.
Единственное, что не разрешено делать ни static_cast
, ни reinterpret_cast
, так это удалять константу. I.E. если у вас есть const char *
и вам нужно преобразовать его в char *
, ни static_cast
, ни reinterpret_cast
не позволят этого. Вместо этого const_cast
- ваш друг; const_cast
используется для удаления модификатора const из типа.