C ++ лямбда-адрес "__closure" в GDB - PullRequest
0 голосов
/ 13 сентября 2018

Я понимаю, что есть скрытый класс замыкания в C ++ 11 или выше для лямбд.Но когда значение __clousre при отладке в gdb 0x0 при вызове лямбды?Что это значит?

// a.cpp
#include <iostream>

using std::cout;

int main() {
  auto l1 = []() {
    cout << "lambda 1\n";
  };
  auto l2 = []() {
    cout << "lambda 2\n";
  };
  l1();
  l2();
  using F = void (*)();
  F lv = l2;
  lv();
}

В GDB:

Breakpoint 1, <lambda()>::operator()(void) const (
    __closure=0x7fffffffd83e) at a.cpp:7
7           cout << "lambda 1\n";
(gdb) c
Continuing.
lambda 1

Breakpoint 2, <lambda()>::operator()(void) const (
    __closure=0x7fffffffd83f) at a.cpp:10
10          cout << "lambda 2\n";
(gdb) c
Continuing.
lambda 2

Breakpoint 2, <lambda()>::operator()(void) const (__closure=0x0)
    at a.cpp:10
10          cout << "lambda 2\n";
(gdb) c
Continuing.
lambda 2
[Inferior 1 (process 27152) exited normally]

G ++ & GDB:

$ g++ --version
g++ (GCC) 8.2.0

$ g++ -g -O0 -std=c++17 a.cpp -o a

$ gdb --version
GNU gdb (GDB) 8.1.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...