是否可以使用具有以下签名的元函数计算整数的平方根:
template<unsigned int N> inline double sqrt();
(或者也许使用 constexpr 关键字,我不知道什么是最好的)。
接着就,随即,sqrt<2>()
将被替换为1.414...
在编译时。
此类功能的最佳实现是什么?
这可能不是您想要的,但我想确保您意识到,通常通过优化,编译器无论如何都会在编译时计算结果。例如,如果您有以下代码:
void g()
{
f(sqrt(42));
}
使用带有优化 -O2 的 g++ 4.6.3,生成的汇编代码为:
9 0000 83EC1C subl $28, %esp
11 0003 DD050000 fldl .LC0
12 0009 DD1C24 fstpl (%esp)
13 000c E8FCFFFF call _Z1fd
14 0011 83C41C addl $28, %esp
16 0014 C3 ret
73 .LC0:
74 0000 6412264A .long 1244009060
75 0004 47EC1940 .long 1075440711
sqrt 函数从未被实际调用,该值只是作为程序的一部分存储。
因此,要创建一个在技术上满足您的要求的函数,您只需要:
template<unsigned int N> inline double meta_sqrt() { return sqrt(N); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)