Penunjuk fungsi dan objek fungsi ialah kedua-dua mekanisme untuk mengendalikan fungsi sebagai data. Penunjuk fungsi ialah penuding kepada fungsi, manakala objek fungsi ialah objek yang mengandungi operator terlampau beban(). Kedua-duanya boleh menangkap pembolehubah dan membuat penutupan. Perbezaannya ialah penunjuk fungsi adalah jenis primitif, manakala objek fungsi ialah kelas penunjuk fungsi mesti menunjuk kepada fungsi yang sah, jika tidak, tingkah laku yang tidak ditentukan akan berlaku, manakala objek fungsi boleh wujud secara bebas daripada fungsi objek fungsi biasanya lebih mudah untuk digunakan dapatkan semula daripada penggunaan penunjuk fungsi. Dalam senario praktikal, ia boleh digunakan untuk menentukan peraturan pengisihan dalam algoritma pengisihan.
Dalam C++, penunjuk fungsi dan objek fungsi ialah dua mekanisme berbeza, digunakan untuk mengendalikan senario di mana fungsi digunakan sebagai data. Walaupun mereka mempunyai persamaan, terdapat juga beberapa perbezaan utama.
Penunjuk fungsi
returnType (*functionPtr)(arguments)
示例:
int add(int a, int b) { return a + b; } int main() { // 声明一个指向 add 函数的函数指针 int (*funcPtr)(int, int) = add; // 通过函数指针调用 add 函数 int result = funcPtr(5, 10); return 0; }
函数对象
class Foo { ... }; Foo funcObj;
Contoh:
class Adder { public: int operator()(int a, int b) { return a + b; } }; int main() { // 创建一个 Adder 函数对象 Adder adder; // 通过函数对象调用 add 函数 int result = adder(5, 10); return 0; }
Objek fungsi
Sebuah objek yang boleh dipanggil Mengandungi operator terbeban(), sama seperti fungsi.
int compareAsc(int a, int b) { return a - b; } void sort(int *arr, int n, int (*compareFunc)(int, int)) { ... }
Jenis:
Penunjuk fungsi ialah jenis primitif, manakala objek fungsi ialah kelas.Kitaran hayat:
Penuding fungsi mesti menunjuk kepada fungsi yang sah, jika tidak, tingkah laku yang tidak ditentukan akan berlaku. Objek fungsi boleh wujud secara bebas daripada fungsi ia dicipta.Kemudahan penggunaan:
Menggunakan objek fungsi selalunya lebih mudah daripada penunjuk fungsi kerana ia lebih dekat dengan sintaks semula jadi fungsi. 🎜🎜Kes praktikal🎜🎜🎜Dalam algoritma pengisihan yang memerlukan lulus fungsi sebagai parameter, anda boleh menggunakan penunjuk fungsi atau objek fungsi untuk menentukan peraturan pengisihan. Contohnya, menggunakan penunjuk fungsi: 🎜struct AscendingComparator { bool operator()(int a, int b) { return a < b; } }; void sort(int *arr, int n, std::function<bool(int, int)> compareFunc) { ... }
Atas ialah kandungan terperinci Apakah persamaan dan perbezaan antara penunjuk fungsi dan objek fungsi dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!