【发布时间】:2016-04-20 14:48:27
【问题描述】:
我真的很想使用一些 void 强制转换来保存二进制数据,但这要么是 g++ 警告级联,要么是 lot 的强制转换。在 C++(最好是 c++11 或更高版本)中是否有一种简单且安全的方法来执行 void 指针算术?
我只在带有 gnu 编译器的 posix 系统上工作,所以这里没有问题。
用例:
我有 void * ptr 到大小 > 1GB 的数据。
我还有其他功能要做,我们称它为
stuff()它是外部库的一部分并获取 (void *, size_t) 作为参数。stuff(ptr, n) 可能会改变底层内存。基本上我需要通过 ptr* 的切片。
代码假设,是,我猜,不会是可移植的。
如果我无法找到更优雅的解决方案,我想我会选择 -Wno-pointer-arithmetics,但答案中提出的解决方案有所帮助
【问题讨论】:
-
您不能对 void 指针进行指针运算。安全与否,这是不可能的。
-
不。算术不适用于
void指针。您可以尝试的解决方案取决于您未显示的代码。 -
为什么将“二进制数据”存储为
void而不是字节(即uint8_t)? -
@KeithThompson:不能说我曾经遇到过这样的系统。就我个人而言,我宁愿使用
uint8_t,因为它清楚地表明它不是字符数据,并明确指出我们需要 8 位字节。
标签: c++ c++11 pointer-arithmetic