我有一个相当大的char*缓冲区(文件的内容,用streambuf-sgetn读取(。我需要将它传递给一个内部函数,其中需要const uint8*。如果不重新解释(不允许(,我怎么能做到这一点?
选项1:使用reinterpret_cast,违反disallowance。
选项2:更改前提,从一个无符号的char(即std::uint8_t
(缓冲区开始,而不是char
缓冲区,这样就不需要转换。
有了这样的限制,可以通过强制转换为void*
来强制转换为所需的指针类型。任何指针都可以投射到void*
,也可以投射到任何指针(如果需要,可以保持或生成常量(。
#include <cstdint>
void f(const uint8_t* p) {}
int main() {
char p[] = "";
f(static_cast<uint8_t*>(static_cast<void*>(p)));
}