类型转换
  • static_cast是编译时计算的吗?

    分成两部分看待,static_cast的类型检查是在编译时完成的,但是类型转换可能在运行时完成。比如下面的例子:

    float f = 3.14;
    int i = static_cast<int>(f);
    

    对应的一种汇编是:

        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-20], edi
        movss   xmm0, DWORD PTR .LC0[rip]
        movss   DWORD PTR [rbp-4], xmm0
        movss   xmm0, DWORD PTR [rbp-4]
        cvttss2si       eax, xmm0
        mov     DWORD PTR [rbp-8], eax
        ud2
    .LC0:
        .long   1078523331
    

    float到int类型是否可以转换的判断是在编译时完成的,但是具体的转换是在运行时完成的(cvttss2si)。