存储 lambda 函数的对象是否有自己的地址?

dus*_*hou 3 c++ lambda

基于本主题的结果

不捕获任何变量([] 内没有任何内容)的 lambda 可以转换为函数指针

我写了一个像这样的程序

void test1(){}
int main() {
    auto test2 = [](){};
    printf("%p\n%p\n", test1, &test1);
    printf("%p\n%p", test2, &test2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是

0x561cac7d91a9

0x561cac7d91a9

0x7ffe9e565397

(零)

https://www.programiz.com/cpp-programming/online-compiler/

那么 test2 存储了一个指向 lambda 函数的函数指针?

我的问题是存储 lambda 数据的对象 test2 没有自己的地址?

我认为这个 test2 应该有自己的地址。

use*_*570 5

存储 lambda 函数的对象是否有自己的地址?

是的,像 C++ 中的所有对象一样,变量test2也有一个唯一的地址。您可以通过打印&testuisng来看到这一点cout,如下所示:

int main() {
    auto test2 = [](){};
     
    std::cout << &test2;  //prints address of test2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

演示

上述修改后的程序的输出为:

0x7ffe4d4b5fcf
Run Code Online (Sandbox Code Playgroud)