Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar


Download 37.33 Kb.
bet7/17
Sana25.10.2023
Hajmi37.33 Kb.
#1720034
1   2   3   4   5   6   7   8   9   10   ...   17
Bog'liq
Lambda ifodalari misollar bilan

Istisno spetsifikatsiyasi
Lambda ifodasi istisno qilmasligini ko'rsatish uchun throw() istisno spetsifikatsiyasidan foydalanishingiz mumkin. Oddiy funktsiyalarda bo'lgani kabi, Visual C++ kompilyatori, agar lambda ifodasi throw() istisno spetsifikatsiyasini e'lon qilsa va lambda ifodasining tanasi quyida ko'rsatilganidek, istisno qilsa, ogohlantirish hosil qiladi:
// throw_lambda_expression.cpp// kompilyatsiya qilish: /W4 /EHsc int main() // C4297 kutilgan ( () otish () ( 5 tashlash; )(); )
qaytish turi
Lambda ifodasining qaytish turi avtomatik ravishda aniqlanadi. Agar ko'rsatilmagan bo'lsa, kalit so'z shart emas. yakuniy qaytarish turiorqaga qaytish turi qaytish turini o'z ichiga olgan standart usul yoki funksiyaning bir qismiga o'xshaydi. Biroq, qaytarish turi parametrlar ro'yxatidan keyin keladi va siz qaytarish turidan oldin orqaga qaytariladigan elementning -> kalit so'zini kiritishingiz kerak.
Agar lambda ifodasining tanasida faqat bitta qaytarish iborasi mavjud bo'lsa yoki lambda ifodasi qiymat qaytarmasa, lambda ifodasining qaytarish turi qismini o'tkazib yuborishingiz mumkin. Agar lambda ifodasining tanasi bitta qaytarish bayonotini o'z ichiga olsa, kompilyator ifodaning qaytish turidan qaytarish turini chiqaradi. Aks holda, kompilyator quyidagi qaytish turini chiqaradi: void . Ushbu tamoyilni ko'rsatish uchun quyidagi kod misollarini ko'rib chiqing.
auto x1 = (int i)( qaytish i; ); // OK: qaytish turi int auto x2 = ( return ( 1, 2 ); ); // XATO: qaytish turi bekor, deduktsiya // braced-init-list dan qaytish turi yaroqsiz
Lambda ifodasi qaytish qiymati sifatida boshqa lambda ifodasini yaratishi mumkin. Qo'shimcha ma'lumot olish uchun qarang ("Yuqori tartibli Lambda ifodalari" bo'limi).
Lambda ifodasining tanasi
Lambda ifodasining tanasini o'z ichiga olgan qismi ( qo'shma bayonot standart sintaksisida) muntazam usul yoki funksiya tanasi bilan bir xil elementlarni o'z ichiga olishi mumkin. Oddiy funktsiya tanasi va lambda ifodasi quyidagi turdagi o'zgaruvchilarga kirishi mumkin:
Ruxsat etilgan o'zgaruvchilar tashqi doiradan (yuqoriga qarang).
Variantlar
Mahalliy e'lon qilingan o'zgaruvchilar
Sinfning ma'lumotlar a'zolari (sinf ichida e'lon qilinganda va buni tuzatganda)
Statik saqlash muddati bo'lgan har qanday o'zgaruvchi (masalan, global o'zgaruvchi)
Quyidagi misolda n o'zgaruvchisini qiymat bo'yicha aniq ushlaydigan va m o'zgaruvchisini mos yozuvlar bo'yicha aniq ushlaydigan lambda ifodasi mavjud.
// captures_lambda_expression.cpp// bilan kompilyatsiya qiling: /W4 /EHsc #include std nom maydonidan foydalanish; int main() ( int m = 0; int n = 0; [&, n] (int a) oʻzgaruvchan ( m = ++n + a; )(4); cout<< m << endl << n << endl; }

Download 37.33 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   ...   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling