Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menyelesaikan Kekaburan dalam Fungsi Terlalu Beban Apabila Melepasi Lambdas sebagai Argumen dalam C?
Dalam C , apabila memanggil fungsi dengan lambda sebagai hujah, kekaburan boleh timbul jika terdapat berbilang beban berlebihan yang sepadan dengan jenis lambda. Ini boleh membawa kepada ralat penyusunan.
Pertimbangkan kod berikut:
#include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main() { foo([](){}); // ambiguous }
Dalam kod ini, terdapat dua lebihan foo: satu mengambil std::function Untuk menyelesaikan kekaburan ini, anda boleh menggunakan operator tambah unary ( ) sebelum lambda, seperti yang ditunjukkan di bawah: Operator tambah memaksa penukaran lambda kepada penuding fungsi, membolehkan lebihan kedua foo untuk dipadankan dengan tepat dan dipanggil tanpa kesamaran. Tingkah laku ini berpunca daripada keupayaan operator unary plus untuk menukar jenis tertentu, termasuk lambdas, kepada penunjuk berfungsi. Fungsi penukaran ini ditakrifkan seperti berikut: Memandangkan jenis penutupan lambda mempunyai fungsi penukaran kepada penuding fungsi, operator unary plus menukar lambda kepada jenis penuding fungsi yang diingini, membenarkan pemadanan tepat dalam peleraian beban berlebihan. Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Kekaburan dalam Fungsi Terlalu Beban Apabila Melepasi Lambdas sebagai Argumen dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!foo(+[](){}); // not ambiguous (calls the function pointer overload)
The operand of the unary + operator shall have arithmetic, unscoped enumeration, or pointer type, and the result is the value of the argument.