3

我刚刚写了一些内联的数学实用函数,并且在测试时注意到

let quat = (3, 0, 0, 3)
(quat |||~||| quat)
|> ijk
|> printAn

完全折叠printAn (18, 0, 0),而开始时(3.0f, 0.0f, 0.0f, 3.0f)仅插入原始值0.0f3.0f常量值,而不评估任何浮点运算符,并且Tuple实例化了一些 s(但几乎没有调试模式下那么多)。

(我使用针对 4.5 框架的 Visual Studio 2013 Update 4,使用默认Release配置。取消定义TRACE常量似乎没有什么区别,也没有open Unchecked。)


不太关心性能影响,因为如果它成为一个问题,应该很容易通过 IL 编织折叠表达式,但我仍然对编译器可以常量折叠的确切内容感兴趣。

4

0 回答 0