gpt4 book ai didi

c++ - 函数和非捕获 lambda 之间的区别

转载 作者:行者123 更新时间:2023-11-28 01:18:50 25 4
gpt4 key购买 nike

之间的确切区别是什么:

auto foo(int i) -> int {
return i + 1;
}

static constexpr auto bar = +[](int i) -> int {
return i + 1;
};

在链接、性能和使用方面?我很好奇 lambda 的行为是否与正常声明的函数完全一样。

最佳答案

链接:foo 是一个函数,具有外部链接。bar是一个变量,它的类型是int (*const)(int),并且有内部链接。我看不出这有任何后果,这里应该将其作为重要区别提及。

性能:在发布版本中,两者都可以内联,所以没有区别。在调试构建中,bar 速度较慢:编译器生成更多的汇编代码和两个(而不是一个)call 指令用于 bar (live demo)。

用法:两者都可以使用相同的语法调用(foo(1)bar(1)),因此没有区别。

如果 lambda 不捕获任何东西,它的行为就像一个普通函数。

关于c++ - 函数和非捕获 lambda 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com