Я использую posix_memalign
(были проблемы с align_alloc
), чтобы распределить (внутри моего new
), поэтому у меня есть void*
. Мне нужно это как int, например, для вычисления выравнивания:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main() {
void *ptr;
auto align{4096}, size{10000};
posix_memalign( &ptr,align,size );
cout << ptr << endl; // works
cout << ptr % align << endl; // not
return 0;
}
Я думал, что в современном C ++ static_cast<long>
это правильный путь, но это дает ошибку, которая не допускается на void*
. Так каков правильный путь? Конечно, я могу использовать броски в старом стиле С, но я стараюсь их избегать.