上面那種是functions,下面這種叫做functors.(我姑且翻譯成函子)兩者最本質的區別在于,上面僅僅是一個過程;而下面,卻可以包含狀態。后者,可以輕松實現閉包。在C++11里面,后者直接演化為lambda了。我就用你提到的sort來舉一個小例子:cppboolmyfunction(inti,intj){return(istructmyclass{booloperator()(inti,intj){return(i}myobject;std::vectormyvector{32,71,12,45,26,80,53,33};std::sort(myvector.begin(),myvector.end(),myfunction);std::sort(myvector.begin(),myvector.end(),myobject);簡化了你的例子,我們來關注本質區別??雌饋?,好像等效對不?那么現在需求變了,排序的時候,我只希望排值大于40的元素,請問咋整,你說,只好把這個40寫到函數里了。那如果我說這個40是來自用戶輸入呢?也可能是50或是60,請問怎么辦?此時,function好像有點沒有用武之地了。但我們的functor卻依然可以大顯身手。cppstructmyclass{intflag;myclass(inti):flag(i){}booloperator()(inti,intj){return((flag};std::vectormyvector{32,71,12,45,26,80,53,33};myclassmyobject(40);std::sort(myvector.begin(),myvector.end(),myobject);//output:3212263345537180例子可能有點怪。。但你明白這意思了么?