Пытаясь лучше понять реализацию лямбда-выражений C ++, я одурачил компилятор трактовкой лямбды как объекта, и кажется, что они размещаются в памяти одинаково.
Примечание : это только для пояснения, я не защищаю от написания подобных взломов в производстве
Это гарантировано спецификацией языка или подробностями реализации компилятора?
struct F
{
int a; int b; int c;
void printLambdaMembers()
{
cout << this << endl; // presumably the lambda 'this'
cout << a << endl; // prints 5
cout << b << endl;
cout << c << endl;
}
};
void demo()
{
int a = 5;
int b = 6;
int c = 7;
auto lambda = [a,b,c]() { cout << "In lambda!\n"; };
// hard cast the object member function pointer to the lambda function
void(decltype(lambda)::*pf)() const = (void(decltype(lambda)::*)() const) (&F::printLambdaMembers);
// run the member function on the lambda pointer
(lambda.*pf)(); // we get 5,6,7
}