在 C++ 的本地范围内使用 lambda

Using lambdas in local scope in c++

像这样在本地范围内声明 lambda 是否可以:

// reference to method is just a call back function. 
void(*referenceToSomeMethod)();

// store call back function
void foo(void(*pointerToMethod)())
{
    referenceToSomeMethod = pointerToMethod; // save reference to method    
}

int main()
{

    referenceToSomeMethod = nullptr;

    if (1 == 1)
    {
        // use of lambda on local scope
        foo([]() {
            printf("Executing callback function\n");
        });


    } // leaving scope lambda may not longer be valid?

    // simulate some work
    Sleep(10000);

    if (referenceToSomeMethod != nullptr)
        referenceToSomeMethod(); // execute lambda
}

在现实生活中,我会等到事件发生时才触发回调方法。我可以 运行 回调指针指向不再存在的函数的风险吗?

我知道这适用于 c# 和其他具有垃圾收集器的语言。但这适用于 C++ 吗?

带有空括号的 Lambda 等同于函数指针,并且将以相同的方式按值进行复制。回答是。