#include <iostream>
int funzione_normale(int a){
if(a==0)
return 0;
return -a;
}
int main(){
int a=5;
//creo il primo lambda
auto Lambda1 = [a] () -> int{ // catturo la variabile per valore
std::cout<<" 1° lambda"<<std::endl;
return funzione_normale(a);
};
//creo il secondo lambda
auto Lambda2 = [&a] () -> int{ // catturo la variabile per reference
std::cout<<" 2° lambda"<<std::endl;
return funzione_normale(a);
};
if( Lambda1() == funzione_normale(a) )
std::cout<<"sono uguali (primo tentativo)"<<std::endl;
a = 3; //cambio a
if( Lambda1() == funzione_normale(a) )
std::cout<<"sono uguali (secondo tentativo)"<<std::endl; //non verrà stampato!
if( Lambda2() == funzione_normale(a) )
std::cout<<"sono uguali (terzo tentativo)"<<std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCmludCBmdW56aW9uZV9ub3JtYWxlKGludCBhKXsKICAgIGlmKGE9PTApCiAgICAgICAgcmV0dXJuIDA7CiAgICByZXR1cm4gLWE7Cn0KIAppbnQgbWFpbigpewogICAgaW50IGE9NTsKICAgIC8vY3JlbyBpbCBwcmltbyBsYW1iZGEKICAgIGF1dG8gTGFtYmRhMSA9IFthXSAoKSAtPiBpbnR7IC8vIGNhdHR1cm8gbGEgdmFyaWFiaWxlIHBlciB2YWxvcmUKICAgICAgICBzdGQ6OmNvdXQ8PCIgMcKwIGxhbWJkYSI8PHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gZnVuemlvbmVfbm9ybWFsZShhKTsgCiAgICB9OwogCiAgICAvL2NyZW8gaWwgc2Vjb25kbyBsYW1iZGEKICAgIGF1dG8gTGFtYmRhMiA9IFsmYV0gKCkgLT4gaW50eyAvLyBjYXR0dXJvIGxhIHZhcmlhYmlsZSBwZXIgcmVmZXJlbmNlCiAgICAgICAgc3RkOjpjb3V0PDwiIDLCsCBsYW1iZGEiPDxzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIGZ1bnppb25lX25vcm1hbGUoYSk7CiAgICB9OwogCiAgICBpZiggTGFtYmRhMSgpID09IGZ1bnppb25lX25vcm1hbGUoYSkgKQogICAgICAgIHN0ZDo6Y291dDw8InNvbm8gdWd1YWxpIChwcmltbyB0ZW50YXRpdm8pIjw8c3RkOjplbmRsOwogCiAgICBhID0gMzsgLy9jYW1iaW8gYQogICAgaWYoIExhbWJkYTEoKSA9PSBmdW56aW9uZV9ub3JtYWxlKGEpICkKICAgICAgICBzdGQ6OmNvdXQ8PCJzb25vIHVndWFsaSAoc2Vjb25kbyB0ZW50YXRpdm8pIjw8c3RkOjplbmRsOyAvL25vbiB2ZXJyw6Agc3RhbXBhdG8hCiAKICAgIGlmKCBMYW1iZGEyKCkgPT0gZnVuemlvbmVfbm9ybWFsZShhKSApCiAgICAgICAgc3RkOjpjb3V0PDwic29ubyB1Z3VhbGkgKHRlcnpvIHRlbnRhdGl2bykiPDxzdGQ6OmVuZGw7IAogCiAgICByZXR1cm4gMDsKfQ==