[英]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.