Saya ingin tahu apa [=]
? Berikut contoh singkatnya
template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
return [=] (T input) -> T { return (offset + input) * factor; };
}
auto milesToKm = makeConverter(1.60936, 0.0);
Bagaimana kode tersebut bekerja, []
bukan [=]
?
Saya berasumsi bahwa
std::function<T (T)>
berarti prototipe fungsi yang (T)
dijadikan argumen dan tipe kembalian T
?
Jawaban:
Yang
[=]
Anda maksud adalah bagian dari daftar tangkapan untuk ekspresi lambda. Ini memberi tahu C ++ bahwa kode di dalam ekspresi lambda diinisialisasi sehingga lambda mendapatkan salinan dari semua variabel lokal yang digunakannya saat dibuat. Ini diperlukan agar ekspresi lambda dapat merujuk kefactor
danoffset
, yang merupakan variabel lokal di dalam fungsi.Jika Anda mengganti
[=]
dengan[]
, Anda akan mendapatkan kesalahan kompiler karena kode di dalam ekspresi lambda tidak akan tahu apa variabeloffset
danfactor
rujukannya. Banyak kompiler memberikan pesan kesalahan diagnostik yang baik jika Anda melakukan ini, jadi cobalah dan lihat apa yang terjadi!sumber
[&]
,[=offset, =input]
dll.Ini daftar tangkapan lambda . Membuat variabel tersedia untuk lambda. Anda dapat menggunakan
[=]
salinan mana berdasarkan nilai, atau[&]
yang lewat dengan referensi.sumber
[]
yang tidak menangkap apa pun. :)