我很震撼地看到了Todd Veldhuizen的元编程指南中的最后一个例子,其中三角函数如
问题1
但是,这让我想知道可运行工具(调用实际的数学库函数,如
Todd的示例需要使用普通算术手动计算三角函数。
那么,我应该假设编译器能够处理所有普通数学函数
问题2
在这种情况下,您只能获得整数的编译时结果,对于
或者,如果模板只能接受整数作为参数,您可以在类中获取多个整数并将它们转换为
sin
和cos
在编译时被预先计算。说实话,这让我大吃一惊,如果您正在编写执行大量此类操作的代码(就像我一样),那么这可能会对性能产生重大影响。问题1
但是,这让我想知道可运行工具(调用实际的数学库函数,如
sin
或cos
)与仅作为编译时数学运算符可用之间的界限在哪里。Todd的示例需要使用普通算术手动计算三角函数。
那么,我应该假设编译器能够处理所有普通数学函数
*
+
-
/
,但没有其他函数吗?问题2
在这种情况下,您只能获得整数的编译时结果,对于
sin
和cos
计算,是吗?也就是说,您不能预编译像sin 45.5
这样的结果,对吗?或者,如果模板只能接受整数作为参数,您可以在类中获取多个整数并将它们转换为
float
,例如传递1
2
3
并生成1.23
来获取浮点值的sin
。