fork download
  1. #include <iostream>
  2.  
  3. int funzione_normale(int a){
  4. if(a==0)
  5. return 0;
  6. return -a;
  7. }
  8.  
  9. int main(){
  10. int a=5;
  11. //creo il primo lambda
  12. auto Lambda1 = [a] () -> int{ // catturo la variabile per valore
  13. std::cout<<" 1° lambda"<<std::endl;
  14. return funzione_normale(a);
  15. };
  16.  
  17. //creo il secondo lambda
  18. auto Lambda2 = [&a] () -> int{ // catturo la variabile per reference
  19. std::cout<<" 2° lambda"<<std::endl;
  20. return funzione_normale(a);
  21. };
  22.  
  23. if( Lambda1() == funzione_normale(a) )
  24. std::cout<<"sono uguali (primo tentativo)"<<std::endl;
  25.  
  26. a = 3; //cambio a
  27. if( Lambda1() == funzione_normale(a) )
  28. std::cout<<"sono uguali (secondo tentativo)"<<std::endl; //non verrà stampato!
  29.  
  30. if( Lambda2() == funzione_normale(a) )
  31. std::cout<<"sono uguali (terzo tentativo)"<<std::endl;
  32.  
  33. return 0;
  34. }
Success #stdin #stdout 0s 2852KB
stdin
Standard input is empty
stdout
 1° lambda
sono uguali (primo tentativo)
 1° lambda
 2° lambda
sono uguali (terzo tentativo)