Есть ли причина отдавать предпочтение static_cast<>
кастингу в стиле C? Они эквивалентны? Есть ли какая-то разница в скорости?
c++
casting
static-cast
dicroce
источник
источник
Ответы:
Приведения в стиле C ++ проверяются компилятором. Приведения в стиле C не выполняются и могут потерпеть неудачу во время выполнения.
Кроме того, можно легко найти приведения в стиле c ++, в то время как действительно сложно найти приведения в стиле c.
Еще одним большим преимуществом является то, что 4 различных приведения в стиле C ++ более четко выражают намерения программиста.
При написании C ++ я почти всегда использовал C ++ поверх стиля C.
источник
dynamic_cast
s.(int)something
не может завершиться неудачей - либо вы приведете к типу int, либо к ошибке компилятора.Короче говоря :
static_cast<>()
дает вам возможность проверки времени компиляции, а C-Style - нет.static_cast<>()
более читабелен и может быть легко обнаружен в любом месте исходного кода C ++, приведение C_Style is'nt.Более объяснение :
Статическое приведение выполняет преобразования между совместимыми типами . Это похоже на приведение в стиле C, но является более ограничительным. Например, приведение в стиле C позволит целочисленный указатель указывать на символ.
Так как это приводит к 4-байтовому указателю (указателю на 4-байтовый тип данных), указывающему на 1 байт выделенной памяти, запись в этот указатель либо вызовет ошибку времени выполнения, либо перезапишет некоторую смежную память.
В отличие от приведения типа C, статическое приведение позволит компилятору проверить совместимость типов данных указателя и указателя, что позволяет программисту уловить это неправильное назначение указателя во время компиляции.
Вы также можете проверить эту страницу с более подробным объяснением приведений C ++: Нажмите здесь
источник
Смотрите Сравнение операторов приведения C ++ .
источник
источник
Отличный пост, объясняющий различные приведения в C / C ++ и что на самом деле делает приведение в стиле C: https://anteru.net/blog/2007/12/18/200/index.html
источник
static_cast
проверяет во время компиляции, что преобразование не происходит между явно несовместимыми типами. В отличие от этогоdynamic_cast
, проверка совместимости типов не выполняется во время выполнения. Кроме того,static_cast
преобразование не обязательно безопасно.static_cast
используется для преобразования из указателя в базовый класс в указатель на производный класс или между нативными типами, такими как enum в int или float в int.Пользователь
static_cast
должен убедиться, что преобразование безопасно.Приведение в стиле C не выполняет никакой проверки ни во время компиляции, ни во время выполнения.
источник
Поскольку существует много разных типов приведения, каждый из которых имеет разную семантику, static_cast <> позволяет вам сказать: «Я делаю законное преобразование из одного типа в другой», например, из int в double. Простой C-стиль может означать многое. Вы кастинг вверх / вниз? Вы переосмысливаете указатель?
источник