c – 平方根元函数?

前端之家收集整理的这篇文章主要介绍了c – 平方根元函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以使用具有以下签名的元函数计算整数的平方根:
template<unsigned int N> inline double sqrt();

(或者可能使用constexpr关键字,我不知道什么是最好的).
这样,sqrt< 2>()将在编译时被1.414 …替换.

什么是这种功能的最佳实现?

解决方法

这可能不是你想要的,但我想确保你意识到通常通过优化,编译器无论如何都会在编译时计算结果.例如,如果您有此代码
void g()
{
  f(sqrt(42));
}

使用g 4.6.3进行优化-O2,得到的汇编代码为:

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); }

猜你在找的C&C++相关文章