在C ++中,有几种方法可以将函数作为参数传递,但是我想了解每个函数的优点和优点,例如,从算法中查找函数的签名:
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
为什么std算法使用模板而不是std :: function作为传递函数?
为什么线程使用移动语义而不使用算法功能?
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
PS:我无视C中用作函数指针的方式。
为什么std算法使用模板而不是std :: function作为传递函数?
std::function
C ++ 98中没有。一种选择是让一个Comparator
带有虚拟成员函数的抽象基类被具体的比较器类覆盖,但是模板版本更加有效,因为它避免了虚拟调度的开销。如果Compare
是类类型,则operator()
通常可以内联。这也是反对std::function
今天使用的论点。
为什么线程使用移动语义而不使用算法功能?
在C ++ 98中也没有右值引用。
显而易见,现在有了右值引用并移动了语义,不允许将值移动到线程中是很愚蠢的(因为某些类型不可复制或无法有效复制)。
为什么std::sort
要按价值作为比较器?了解为什么函数对象应该按值传递以进行讨论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句