4

違いは何ですか

int i = 123;
int k;
k = *(int *) &i;
cout << k << endl; //Output: 123

int i = 123;
int k;
k = i;
cout << k << endl; //Output: 123

どちらも同じ出力になりますが、違いはありますか?

(高速逆平方根の Quake3 コードで最初のスニペットを見つけました)

4

3 に答える 3

1

いいえ、違いはありません。両方の割り当ては、基本的に anintの価値のあるビットをメモリの格納iからメモリの格納にコピーしていますk

intソース変数とデスティネーション変数の型が異なる場合に、このようなトリックが使用されることがありますが、これは単にint.

十分に賢いコンパイラは、両方のバージョンでまったく同じコードを生成するはずです。

于 2013-05-20T08:17:40.387 に答える