static_castに関して内部の挙動が気になり質問いたします。
単純なポインタの位置移動のみなのかなと考えていたのですが
int → float などバイトは同じだけどバイトの配置で構造が異なるものの場合
特別な処理がいるのではないかなと思いました。
もしここら辺知見がある方がおりましたらお聞きしたいです。
例えば Intel x64 CPU(Intel Core i5)/gcc 15.2.0の場合、以下のコードをコンパイル(アセンブリ・コードへ翻訳)すると、
int main (){
int i = 10;
float f = static_cast<float>(i);
return 0;
}
int 型から float 型への static_cast は整数から浮動小数点数への変換専用の命令の一つである cvtsi2ssl が使用されます。
cvtsi2ssl -8(%rbp), %xmm0
CVTSI2SS — Convert Doubleword Integer to Scalar Single Precision Floating-Point Value
https://www.felixcloutier.com/x86/cvtsi2ss
返信ありがとうございます。
つまりポインタ以外の変換に関しては特別な翻訳を通して使い
ポインタの場合は加算減算でseekしているという認識ですかね
はい、利用している CPU に変換命令が用意されている場合には、それがデフォルトで使われる様です。