static_cast
при условии, что вы знаете (в соответствии с дизайном вашей программы), что на самом деле указанная вещь является int
.
static_cast предназначен для отмены любого неявного преобразования.Вы конвертировали в void*
неявно, поэтому вы можете (и должны) конвертировать обратно с помощью static_cast
, если , вы знаете, что вы действительно просто отменяете более раннее преобразование.
С этим допущением,ничего не интерпретируется - void
является неполным типом, что означает, что он не имеет значений, поэтому вы ни в коем случае не интерпретируете ни сохраненное значение int как void, ни сохраненное значение void как int.void*
- это просто уродливый способ сказать: «Я не знаю тип, но я собираюсь передать указатель кому-то еще, кто знает».
reinterpret_cast
, если выпропущенные детали, которые означают, что вы могли бы на самом деле читать память с использованием типа, отличного от того, для которого был написан тип, и помните, что ваш код будет иметь ограниченную переносимость.
Кстати, не очень много веских причиндля использования указателя void*
таким образом в C ++.Интерфейсы обратного вызова в стиле C часто можно заменить либо функцией шаблона (для всего, что напоминает стандартную функцию qsort
), либо виртуальным интерфейсом (для всего, что напоминает зарегистрированного слушателя).Если ваш код C ++ использует какой-то C API, то, конечно, у вас нет большого выбора.