次のコードをでコンパイルするとg++ 4.7
。
g++ -Wall -fstrict-aliasing
最初のキャストで警告が表示されます。
warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
2番目のキャストは警告なしで問題ありません。誰かが最初のキャストで警告する理由を理解するのを手伝ってもらえますか?
int main()
{
char a [16];
char * p = &a[0];
//int i = *((int *)(&a[0])); //bad
int j = *((int *)(p)); //ok
return 0;
}