|
Standart funktsiyani ko'rib chiqing
|
bet | 4/7 | Sana | 19.01.2024 | Hajmi | 293,8 Kb. | | #141255 |
Bog'liq Ibrohimova Sumayya Hamza qiziStandart funktsiyani ko'rib chiqing:
int a=5;
void Func()
{
cout << "Hello World! " <}
int main()
{
Func();
return 0;
}
Ko'rib turganingizdek, Func() funksiyasi asosiy funktsiyadan OUTSIDE deb e'lon qilingan va ushbu hujjatning barcha global o'zgaruvchilari unga ko'rinadi, masalan int a=5;.
Endi lambda funktsiyasini ko'rib chiqamiz:
uning sintaksisi quyidagicha:
[/*видимые переменные*/](/*аргументы*/)
{
//тело функции
};
Например:
auto pf=[]()
{
cout << "Hello World! "<< endl;
};
pf1();
auto pf2=[](int b)
{
cout << "Hello World! b="< };
pf2(10);
Ikkala holatda ham biz pf.. bufer ko'rsatgichidan foydalandik, lekin siz usiz ham qila olasiz.
Endi o'zgaruvchilarning ko'rinishi bilan bog'liq eng muhim nuqta shundaki, biz funktsiyani main ichida chaqirsak ham, aslida uning ko'rish zonasi (konteksti) bu funktsiyadan tashqarida, ya'ni. u birinchi misoldagi Func() funksiyasiga yaqin, u global o‘zgaruvchilarni ko‘ra oladi, lekin u O‘ZIDA asosiy funksiya ichida mahalliy o‘zgaruvchilarni ko‘rmaydi.Unga mahalliy o‘zgaruvchilarni “ko‘rsatish” uchun quyidagi usullardan foydalanishingiz mumkin:
int a=5;
int main()
{
int c=10;
auto pf2=[&c]()
{
cout << "Hello World! a=" <holda biz LOKAL o'zgaruvchilarni O'zgartira olmaymiz.
qiymati bo'yicha mutable auto kalit so'zi bilan pf2=[c]()mutable
Bu holda biz LOCAL o'zgaruvchilarni O'ZGARTIRISH MUMKIN!!! "original" EMAS
biz qismni havola bo'yicha va qisman qiymat bo'yicha o'tkazishimiz mumkin, ularni vergul bilan ajratamiz
biz yuqorida yozilgan barcha o'zgaruvchilarni auto pf2=[&]() havolasi yordamida qabul qilishimiz mumkin.
yuqorida yozilgan barcha o'zgaruvchilarni auto pf2=[=]() qiymati bo'yicha olishimiz mumkin.
sinf ichida bu klassni this auto pf2=[this]() kalit so‘zi yordamida belgilashingiz mumkin.
Muhim eslatma: funktsiya anonim bo'lsa-da va go'yoki asosiy funktsiya ichida yozilgan bo'lsa-da, uning konteksti (ko'rinish zonasi) yuqorida, "global ko'rinish zonasida" joylashgan, shuning uchun kod
int main()
{
int c=10;
[=]()
{
cout << "Hello World! a=" < return 0;
}
U faqat "Yakuniy kod" ni ko'rsatadi, chunki Funktsiya chaqiruvi yo'q edi, biz faqat uni amalga oshirishni yozdik, lekin chaqirmadik.
Yuqorida aytib o'tilganidek, polimorf o'ram shaklida buferdan foydalanish shart emas, ba'zi hollarda (masalan, uni boshqa funktsiyaga argument sifatida o'tkazishda) darhol lambda funktsiyasini yozishingiz mumkin.
Masalan:
int a=5;
void Func_in_func(function Function)
{
cout<< "Call func in func"< Function();
}
int main()
{
int c=10;
Func_in_func([=]()
{
cout << "Hello World! a=" <Download 293,8 Kb. |
| |