【发布时间】:2015-04-11 14:40:53
【问题描述】:
相关: Is this treatment of int64_t a GCC AND Clang bug?
我能想到的唯一解决方案是将其中一个操作数显式转换为int64,强制乘积也至少为int64。
但是如果这样做,那么编译器的智能就可以实际执行int64*int32,或int64*int64,或者理想情况下,将其优化回int32*int32。
正如相关问题中所讨论的,将int32*int32 的结果分配给int64 并不会改变int32*int32 已经导致UB 的事实。
有什么想法吗?
【问题讨论】:
-
C 和 C++ 是不同的语言,但您已经用这两种语言标记了您的问题。如果您实际上是在尝试提出两个单独的问题(“我如何在 C 中可移植地执行此操作?”和“我如何在 C++ 中可移植地执行此操作?”),那么您应该分别发布它们。如果您特别需要一个可移植且在两者中定义明确的解决方案,请明确说明(并可能提及原因,因为这不是常见要求)。
-
我看不出你标记为相关的问题实际上与这个问题有什么关系。
-
如果你的编译器不能为这样一个基本的东西生成最佳代码,你可能应该寻找另一个编译器来编写一些性能关键的东西。