[英]Is it guaranteed that intptr_t safely roundtrips through uintptr_t?
我可以获取一个intptr_t
并将其分配或 memcpy 到一个uintptr_t
并再次返回并保证最终得到相同的值吗?
也就是说,以下任何一项都可以保证工作(无断言):
使用赋值:
intptr_t i1 = f();
uintptr_t u = i1;
intptr_t i2 = u;
assert(i1 == i2);
使用memcpy
:
intptr_t i1 = f();
uintptr_t u;
memcpy(&u, &i1, sizeof(u));
memcpy(&i2, &u, sizeof(u));
assert(i1 == i2);
如果标准不保证,则可以在编译或运行时检查条件以确定它是否在特定平台上得到保证。
memcpy
保证工作,因为它将值视为字节序列。 该分配不能保证工作,但通常可以在任何使用 2s 补码整数的机器上工作。 使用 1s 补码或符号幅度的机器会将 -0 的值更改为 0,尽管断言仍然可以,因为 -0 == 0 为真。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.