В C++ для любого типа данных я могу сделать следующее:
Type* typedPointer = obtain();
void* voidPointer = typedPointer;
какой бросок выполняется, когда я присваиваюсь Type*
кому: void*
? Это то же как
Type* typedPointer = obtain();
void* voidPointer = reinterpret_cast<void*>( typedPointer );
или это - некоторый другой бросок?
Это стандартное преобразование указателя. Поскольку это стандартное преобразование, оно не требует явного приведения.
Если вы хотите воспроизвести поведение этого преобразования с явным приведением, это будет static_cast
, а не reinterpret_cast
.
В соответствии с определением static_cast
, данным в 5.2.9 / 2, static_cast
может выполнять все преобразования, которые могут выполняться неявно.
Как выглядят модульные тесты?
Облегчает ли конструкция написание требуемых тестов?
-121--2970314-Это не приведение, это неявное преобразование. Слепки являются явными по определению. Это не более чем актерский состав, чем
char c = 'a';
int i = c;
.
Это один и тот же гипс. Любой указатель может быть приведен к указателю на пустоту.
Доступно неявное преобразование из Тип *
в void *
. Вы можете использовать static_cast
, чтобы прояснить цель кода. Для реверса требуется reinterpret_cast
РЕДАКТИРОВАТЬ : согласно комментарию для реверса также можно использовать static_cast
. Пробовал образец кода, и он действительно компилируется. Не знал этого и всегда использовал reinterpret_cast для преобразования из пустоты *.