【发布时间】:2013-05-27 05:03:55
【问题描述】:
看到 Todd Veldhuizen 的metaprogramming guide 中的最后一个示例给我留下了深刻的印象,其中像sin 和cos 这样的三角函数是在编译时预先计算的。老实说,这让我大吃一惊,如果您编写的代码像我一样在循环中执行大量此类操作,那么这可能会对提高性能产生重大影响。
问题 1
但是,这让我想知道在可用作运行时工具(调用实际数学库函数,如 sin 或 cos)与仅可用作编译时工具之间的界线在哪里数学运算符。
Todd 的示例需要仅使用普通算术手动计算三角函数。
那么我是否可以假设编译器能够处理所有普通数学函数 * + - / 但没有别的?
问题 2
在这种情况下,您只能获得 sin 和 cos 整数计算的编译时结果,对吧?也就是说,你不能预编译像sin 45.5 这样的结果,对吗?
或者如果模板只能接受整数作为参数,你可以取几个整数并在类中用它们创建一个float,比如传递123,然后将1.23传递给获取浮点值的sin。
【问题讨论】:
标签: c++ templates math metaprogramming