IRCについて誰かと話し合ったところ、この質問が出てきました。標準では、型のオブジェクトを左辺値で変更することが許可されていint
ますchar
。
int a;
char *b = (char*) &a;
*b = 0;
位置合わせが正常であることがわかっている場合、これを反対方向に実行することは許可されますか?
私が見ている問題は、エイリアシングルールを非対称関係と見なす場合、エイリアシングルールが次の単純なケースをカバーしていないことです。
int a;
a = 0;
その理由は、各オブジェクトに一連のsizeof(obj)
unsigned char
オブジェクト(「オブジェクト表現」と呼ばれる)が含まれているためです。を変更するint
と、それらのオブジェクトの一部またはすべてが変更されます。ただし、エイリアシングルールではint
、char
またはを変更することは許可されているだけで、その逆は許可されてunsigned char
いません。もう一つの例
int a[1];
int *ra = a;
*ra = 0;
3.10 / 15(「...を含む集合体または共用体型」)では一方向のみが記述されますが、今回は逆の方向(「要素または非静的データメンバー型である型)が必要です。集計...")。
他の方向が暗示されていますか?この質問はCにも当てはまります。