与将条件作为模板参数传递给sort()的比较导致比将条件函数指针传递给qsort()更少的开销?

ale*_*fox 6 c++ sorting

在Stroustrup的C++编程语言中,当他讨论标准库的设计时,他说,

例如,将比较标准构建为排序函数是不可接受的,因为可以根据不同的标准对相同的数据进行排序.这就是为什么C标准库qsort()将比较函数作为参数而不是依赖于固定的东西,比如<运算符.另一方面,每次比较的函数调用所施加的开销qsort()作为进一步库构建的构建块而妥协.

以上这些对我有意义.但在第二段中,他说,

这个开销严重吗?在大多数情况下,可能不是.但是,函数调用开销可能会占用某些算法的执行时间,并导致用户寻找替代方案.通过§13.4中描述的模板参数提供比较标准的技术解决了这个问题.

在§13.4中,比较标准被定义为具有静态成员函数的类(进行比较).当这些类用作模板参数时,仍然通过其静态成员函数进行比较.在我看来,仍然会有调用静态成员函数的开销.

Stroustrup的意思是什么?

Csq*_*Csq 8

std::sort是一个功能模板.sort在编译期间,将为每个类型和比较运算符创建单独的实例.并且因为对于每个sort实例化,类型和比较器在编译时是已知的,这允许内联比较器功能并因此避免函数调用的成本.