我遇到过一个包含以下代码的C++库:
void *data;
unsigned length;
...
addr = data + length
Run Code Online (Sandbox Code Playgroud)
首先,使用void*算术没有多大意义,因为编译器不知道每个元素的"大小"是什么(这里更好地解释: void*arithmetic).
但是,因为我已经使用了我的代码库,它似乎工作,我想知道以下内容.这种行为是否具有确定性,因为所有GCC每次都会生成相同的代码?或者,GCC会以启发式的方式对其进行优化吗?
指针运算对void*指针的行为是未定义的.
GCC允许它作为一个非标准编译器扩展(基本上关于void*作为char*用于指针运算的目的).