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

标签 c++ lambda

基于本题的结果

A lambda which captures no variables (nothing inside the []'s) can be converted into a function pointer

我写过这样的程序

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

    return 0;
}

结果是

0x561cac7d91a9

0x561cac7d91a9

0x7ffe9e565397

(无)

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

所以 test2 正在存储一个指向 lambda 函数的函数指针?

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

我觉得这个test2应该有自己的地址。

最佳答案

Does a object stores lambda function have it's own address?

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

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

Demo

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

0x7ffe4d4b5fcf

关于c++ - 对象存储 lambda 函数是否有自己的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74359033/

相关文章:

c# - 谁能向我解释为什么在 lambda 表达式中使用迭代变量是个坏主意

c# - 有没有一种方法可以从包含代码的字符串中动态定义谓词主体?

c++ - 如何迭代修改后的 std::map 值?

c++ - shared_ptr 和循环引用

C++删除动态分配内存的问题

c# - 为什么这个 Linq 方法接受表达式类型的参数

amazon-web-services - 在 terraform 中调用远程 lambda 函数

c++ - 非类型模板参数

c++ - TemplateClasses 相互依赖

lambda - CUDA 推力快捷数学函数