【发布时间】:2016-11-24 09:37:17
【问题描述】:
我遇到了一个包含以下代码的 C++ 库:
void *data;
unsigned length;
...
addr = data + length
首先,使用 void* 算术 没有多大意义,因为编译器不会知道每个元素的“大小”是多少(这里有更好的解释: void * arithmetic)。
但是,由于我在代码中使用了该库并且它似乎可以工作,所以我想知道以下内容。这种行为是否具有确定性,因为所有 GCC 每次都会生成相同的代码?或者,GCC 会以启发式的方式对其进行优化吗?
【问题讨论】:
-
这是一个 GCC 扩展,显然他们不会改变它的规范。 void 的大小将始终被视为 1。如果您打算使用另一个编译器......嗯......它是 UB(但 AFAIK 每个编译器都会为此发出至少一个警告)
-
@acraig5075:显然不是,这个问题在解释这个问题不是关于什么时甚至提到了“重复”。