выезд SCons. Например, Гибель 3 и Блендер делает использование из него.
В C преобразования указателей в void *
и обратно всегда были неявными.
В C ++ преобразования из T *
в void *
неявны, но void *
для чего-либо еще требует приведения.
Полезно понимать, что преобразования типа указателя на самом деле не требуют выполнения дополнительных инструкций ЦП. Они анализируются во время компиляции, чтобы понять намерения разработчика. void *
- непрозрачный указатель. Все это говорит о том, что тип остроконечного предмета неизвестен. C слабо типизирован. Он позволяет неявно осуществлять прямое преобразование между ( void *
) и любым ( T *
). C ++ строго типизирован. Преобразование из ( void *
) в ( T *
) на самом деле не будет хорошим аргументом в пользу строго типизированного языка. Но C ++ должен был оставаться обратно совместимым с C, следовательно, он должен был разрешать такие преобразования. Тогда руководящий принцип таков: явное лучше, чем неявное. Следовательно, если вы хотите преобразовать ( void *
) в какой-то конкретный ( T *
) указатель, вам необходимо явно записать это в коде. Преобразование из ( T *
) в ( void *
) не требует явного преобразования, поскольку напрямую с указателем (void *) ничего нельзя сделать (можно вызвать бесплатно () хотя). Следовательно, преобразование ( T *
) в ( void *
) довольно безопасно.
C ++ более строго типизирован, чем C. Многие преобразования, особенно те, которые подразумевают другую интерпретацию значения, требуют явного преобразования. Оператор new в C ++ - это типобезопасный способ выделения памяти в куче без явного приведения типов.