在Accelerated C++ Programming一书中,第 205 页,有以下两个实现find
template <class In, class X> In find(In begin, In end, const X& x)
我有兴趣了解以下两种实现在性能方面有什么区别(编译后是否实际上相同?)。
非递归的
template <class In, class X> In find(In begin, In end, const X& x)
{
while (begin != end && *begin != x)
++begin;
return begin;
}
递归的
template <class In, class X> In find(In begin, In end, const X& x)
{
if (begin == end || *begin == x)
return begin;
begin++;
return find(begin, end, x);
}
通过使用Kerrek建议的编译器资源管理器,我得到了以下信息
非递归https://godbolt.org/g/waKUF2
递归https://godbolt.org/g/VKNnYZ
编译后好像一模一样?(如果我正确使用该工具..对不起,我对 C++ 很陌生)