我刚刚写了some inlined maths utility functions,并且在测试时注意到了
let quat = (3, 0, 0, 3)
(quat |||~||| quat)
|> ijk
|> printAn
完全折叠为printAn (18, 0, 0)
,而(3.0f, 0.0f, 0.0f, 3.0f)
开头只插入原始0.0f
和3.0f
常量值,而不评估任何浮点运算符和{{1}实例化(但不像调试模式那么多)。
(我使用针对4.5框架的Visual Studio 2013 Update 4,使用默认的Tuple
配置。取消定义Release
常量似乎不会产生影响,{{1 }}。)
我 确切地说,编译器可以不断折叠。