仍在与 C (C99) 未定义和未指定的行为作斗争。
这次是以下未指定行为(附件 J.1):
将值存储在具有多个该值的对象表示的对象中时使用的表示 (6.2.6.1)。
相应的 6.2.6.1 节指出:
如果将运算符应用于具有多个对象表示的值,则使用哪个对象表示不应影响结果的值43)。如果一个值使用具有多个对象表示的类型存储在一个对象中,则未指定使用哪种表示,但不应生成陷阱表示。
附注 43:
当对象作为 type 的对象访问时,具有相同有效类型的对象可能具有相同的值
x
,y
但在其他上下文中具有不同的值。特别是,如果为 type 定义,则并不意味着。此外,并不一定意味着 和具有相同的价值;对类型值的其他操作可能会区分它们。T
T
==
T
x == y
memcmp(&x, &y, sizeof(T)) == 0
x == y
x
y
T
我什至不明白什么是具有多个对象表示的值。例如,它是否与 0(负零和正零)的浮点表示有关?