Недавно я изучающие лямбда-выражения и следующий код лямбда меня удивляет:Почему тело моего выражения лямбда в функции члена не выполняется?
#include <iostream>
class lambda_this_test
{
private:
int mNumber;
public:
lambda_this_test()
{
mNumber = 11;
};
void print_member()
{
//lambda expression
[this]{mNumber = 12; std::cout<< "mNumber = \n"<<mNumber<<std::endl;};
}
};
int main()
{
lambda_this_test testClass;
testClass.print_member();
}
При выполнении не печатает можно увидеть так, что кажется, тело лямбда-выражения не выполняется вообще, а потом я использую gdb, чтобы доказать это, потому что в функции print_member() нет кода.
Могу ли я спросить, что случилось с моим использованием лямбда?
Привет, кажется, что один из формальных элементов выражения лямбда: [capture-list] (parametr) {body}, что твой последний «()» означает? –
@ LiuNick: да, когда вы объявляете лямбда, вот как это выглядит: [capture-list] (parametr) {body}; но это как объявление функции - она не будет работать, пока вы ее не вызовете. 'lambda()' выполняет тело вашей лямбды, а сама лямбда может быть «встроена», '[capture-list] (parametr) {body}();' вызывает вашу лямбду –