Я пытаюсь использовать в стеке буфер char
в качестве хранилища для некоторых других типов данных.invalid cast from char * to int *
В качестве теста я начал с самого простого int
, но указатель на литье символов в указатель целого не компилируется.
char buf[256];
int* l = static_cast<int*>(buf);
*l = 20;
ошибки я получил это
error: invalid static_cast from type ‘char*’ to type ‘int*’
Будучи этими примитивными данными, которые я ожидал, чтобы это работало: вы знаете, что механики позади этого конкретного случая?
Я выяснил, используя reinterpet_cast
, но я бы хотел использовать static_cast
, поскольку это последнее должно быть быстрее.
Почему, по вашему мнению, static_cast быстрее, чем reinterpret_cast для указателей? –
'int l = static_cast ('c');' будет работать, но не для указателей. –
Вы не должны указывать такие указатели, если не знаете, что делаете. Возможно, что буфер не может быть правильным выравниванием для int, и в этом случае в зависимости от вашей системы может произойти сбой или может работать, но смещенный доступ имеет тенденцию быть очень дорогостоящим в CPU. Поэтому беспокоиться о скорости бросков является наименьшей из ваших проблем. –