但如果这样做的话,那么就取决于编译器的智能来实际执行int64*int32, or int64*int64,或者理想情况下,将其优化回int32*int32.
正如相关问题中所讨论的,分配结果int32*int32 to int64并没有改变这样的事实int32*int32已经引起UB。
任何想法?
您已经指出了如何以标准、可移植且高效的方式执行此操作:
int64_t mul(int32_t x, int32_t y) {
return (int64_t)x * y;
// or static_cast<int64_t>(x) * y if you prefer not to use C-style casts
// or static_cast<int64_t>(x) * static_cast<int64_t>(y) if you don't want
// the integral promotion to remain implicit
}
您的问题似乎是关于一个假设的架构,该架构具有与函数签名相对应的汇编指令
int64_t intrinsic_mul(int32_t x, int32_t y);
int64_t intrinsic_mul(int64_t x, int64_t y);
int64_t intrinsic_mul(int64_t x, int32_t y); // and maybe this too