Wyrażenia lambda (C++11)______________________
EDIT:
Sprawdziłem coś... (
kompilator online)
Ten kod zwraca "11":
#include <iostream>
using std::cout;
int a = 6;
int b = 8;
int main()
{
int a = 2, b = 5;
cout <<[ a, b ]( int a, int b )->int { return::a + b; }( 18, - 7 );
return 0;
}
Jednakże ten kod zwraca "-1":
#include <iostream>
using std::cout;
int a = 6;
int b = 8;
int main()
{
int a = 2, b = 5;
cout <<[]( int a, int b )->int { return::a + b; }( 18, - 7 );
return 0;
}
Różnią się one jedną linijką:
cout <<[ a, b ]( int a, int b )->int { return::a + b; }( 18, - 7 );
.
cout <<[]( int a, int b )->int { return::a + b; }( 18, - 7 );
.
W kursie(link podałem na początku tego postu) nie jest w ogóle wspomniane
co można wpisać w kwadratowe nawiasy, ani co wpisanie tam czegokolwiek zmienia...
Trzymając się kursu, poprawna będzie linijka kodu z wersji drugiej.
______________________________________________________________________________________
jednak czy mógłby mi ktoś dokładnie objaśnić co dzieje się po "coucie"?? |
Owszem.
...
Właściwie mógłbym dalej już nie pisać,
bo odpowiedziałem na twoje pytanie,
ale to by było złe z mojej strony... >:D
Na początku tego postu zamieściłem link do fragmentu kursu.
Tam właściwie znajdziesz wszystko co jest Ci potrzebne.
Jednak warto zwrócić uwagę na ten fragment:
return::a + b;
.
Dodanie operatora zakresu przed
a sprawia,
że nie jest brany argument
a z funkcji lambda,
natomiast brana jest wartość zmiennej globalnej
a.
Ten oto prosty przykład powinien rozwiać wszelkie wątpliwości co do tego fragmentu:
namespace NamespaceA
{
int x;
}
int x;
int main()
{
int x;
x = 0;
::x = 1;
NamespaceA::x = 2;
}