this
не является переменной (это ключевое слово). Таким образом, обычные правила захвата переменных не применяются. Оба параметра capture-defaults & и = захватывают объект, на который указывает this
т.е. *this
по ссылке. Начиная с C ++ 20, неявный захват *this
при использовании = capture-default устарел.
Очевидное различие между использованием параметра capture-default и this
состоит в том, что первое неявно захватывает любые локальные переменные, используемые в лямбде, а второе - нет.
В случае показанного лямбда, похоже, что он не использует никаких захватов, поэтому любое объявление захвата кажется избыточным.