-
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)。
类型转换