Преобразование типа C++ [дубликат]

5
задан Community 23 May 2017 в 12:22
поделиться

4 ответа

Сказать «C-приведение - это плохо» - это крайность, которая сама по себе примерно так же плоха, как постоянное использование C-образного приведения.

Области, в которых следует использовать «новые» преобразования в стиле C ++: иерархические преобразования (повышающие, понижающие, перекрестные), преобразования с константной корректностью и преобразования с переинтерпретацией. Для арифметических приведений приведения в стиле C работают отлично и не представляют опасности, поэтому их можно безопасно использовать в коде C ++. Фактически, я бы действительно рекомендовал использовать в качестве арифметических преобразований только C-образные преобразования - просто чтобы арифметические преобразования выглядели иначе, чем другие типы преобразования.

3
ответ дан 15 December 2019 в 00:48
поделиться
  1. static_cast - это стандартный способ C ++ для выполнения приведения во время компиляции, когда программист знает тип объекта и / или хочет сообщить компилятору.
  2. dynamic_cast похож на '(T) obj', где приведение проверяется во время выполнения.
  3. reinterpret_cast используется для приведения типов к различным объектам без проверки во время выполнения.
  4. const_cast явно преобразуется в идентичный тип путем удаления квалификаторов const и volatile.
2
ответ дан 15 December 2019 в 00:48
поделиться

static_cast - это просто приведение c, например. (целое) 1.000. это ничего не стоит и не может потерпеть неудачу. Но это единственное значение - синтаксический сахар (он полезен для поиска в редакторе)

reinterpret_cast - это эквивалент (void *) в C ++. Он может взорваться тебе в лицо. Используйте это, чтобы указать компилятору просто сделать это, а другим программистам - быть очень осторожными.

dynamic_cast - более безопасная версия, которая возвращает null, если преобразование не может быть выполнено. Это требует небольших затрат времени выполнения.

См. Также Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?

-2
ответ дан 15 December 2019 в 00:48
поделиться

static_cast (e-of-TYPE2) - безопасное приведение. Это означает, что есть преобразование из TYPE2 в TYPE1.

reinterpret_cast близок к приведению C в том смысле, что он допускает практически любое преобразование (с некоторыми ограничениями). Компилятор ожидает, что вы узнаете, что преобразование типа правильное.

Единственное, что не разрешено делать ни static_cast , ни reinterpret_cast , так это удалять константу. I.E. если у вас есть const char * и вам нужно преобразовать его в char * , ни static_cast , ни reinterpret_cast не позволят этого. Вместо этого const_cast - ваш друг; const_cast используется для удаления модификатора const из типа.

1
ответ дан 15 December 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: