在C++中有几种方法可以将函数作为参数传递,但我想了解每种方法的优点和优点,例如,从算法中查看函数的签名:
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
Run Code Online (Sandbox Code Playgroud)
为什么std算法使用模板来传递函数而不是std :: function?
为什么线程使用移动语义和算法函数不?
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
Run Code Online (Sandbox Code Playgroud)
PS:我无视C中用作函数指针的方式.
为什么std算法使用模板来传递函数而不是std :: function?
std::function在C++ 98中没有.一种替代方法是使具有Comparator虚拟成员函数的抽象基类被具体的比较器类覆盖,但模板版本更有效,因为它避免了虚拟调度的开销; 如果Compare是类类型,那么operator()通常可以内联.这也是反对std::function今天使用的论据.
为什么线程使用移动语义和算法函数不?
在C++ 98中也没有右值引用.
很容易看出,现在我们有rvalue引用和移动语义,不允许将值移动到线程中是愚蠢的(因为某些类型不可复制或无法有效复制).
为什么std::sort要按价值取比较?了解为什么函数对象应该按值传递以供讨论.
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |