为什么力扣中std::sort的cmp函数不加static会出错?

今天在力扣上做题的时候出现了一个有意思的错误

题目:1005.K 次取反后最大化的数组和
为什么力扣中std::sort的cmp函数不加static会出错?_第1张图片

错误信息: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,和对象无关的。

你可能感兴趣的:(笔记,leetcode,算法,职场和发展)