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