C (C99) の未定義および未指定の動作にまだ苦労しています。
今回は、次の未規定の動作です (附属書 J.1):
その値に対して複数のオブジェクト表現を持つオブジェクトに値を格納するときに使用される表現 (6.2.6.1)。
対応するセクション 6.2.6.1 には次のように記載されています。
複数のオブジェクト表現を持つ値に演算子が適用される場合、どのオブジェクト表現が使用されるかは、結果の値に影響を与えません43)。その値に対して複数のオブジェクト表現を持つ型を使用して値がオブジェクトに格納される場合、どの表現が使用されるかは指定されていませんが、トラップ表現は生成されません。
次の注記 43:
同じ実効型を持つオブジェクト
x
とは、 type のオブジェクトとしてアクセスされたときに同じ値を持つことができますが、他のコンテキストでは異なる値を持つことができます。特に、type に対して が定義されている場合、 はそれを意味しません。さらに、必ずしもそれを意味するわけではなく、同じ値 を持っています。タイプの値に対する他の操作は、それらを区別する場合があります。y
T
T
==
T
x == y
memcmp(&x, &y, sizeof(T)) == 0
x == y
x
y
T
複数のオブジェクト表現を持つ値が何であるかさえ理解していません。たとえば、0(負および正のゼロ)の浮動小数点表現に関連していますか?