пустые указатели: различие между C и C++

выезд SCons. Например, Гибель 3 и Блендер делает использование из него.

18
задан Ziezi 12 June 2017 в 17:40
поделиться

3 ответа

В C преобразования указателей в void * и обратно всегда были неявными.

В C ++ преобразования из T * в void * неявны, но void * для чего-либо еще требует приведения.

34
ответ дан 30 November 2019 в 07:13
поделиться

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

-1
ответ дан 30 November 2019 в 07:13
поделиться

C ++ более строго типизирован, чем C. Многие преобразования, особенно те, которые подразумевают другую интерпретацию значения, требуют явного преобразования. Оператор new в C ++ - это типобезопасный способ выделения памяти в куче без явного приведения типов.

6
ответ дан 30 November 2019 в 07:13
поделиться