本文主要是介绍为什么力扣中std::sort的cmp函数不加static会出错?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天在力扣上做题的时候出现了一个有意思的错误
题目:1005.K 次取反后最大化的数组和
错误信息:error: reference to non-static member function must be called
sort(nums.begin(),nums.end(),cmp);
我自定义了sort的cmp
函数,但是出错了,查阅资料后发现:
- sort中的比较函数cmp要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。
因为:非静态成员(non-static)函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。
同时静态成员函数不可以调用类的非静态成员(因为非静态成员是依赖于对象的,有可能对象不存在,只有类存在,那就会出现错误)。
一般来说就声明为main函数外面的全局函数,在力扣中就声明为static
,和对象无关的。
这篇关于为什么力扣中std::sort的cmp函数不加static会出错?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!