首页 > 解决方案 > 在其他函数或循环中构造 lambda 时是否存在性能问题?

问题描述

在 JavaScript 中,如果不需要闭包, Mozilla 建议不要在其他函数中创建函数,因为这会对脚本性能产生负面影响。在 JavaScript 中,同样的问题也适用于在循环内创建函数时。同样的问题是否适用于 C++ lambda?

例如,这两个函数之间是否存在性能差异:

int f1(vector<int> v) {
    for_each(v.begin(), v.end(), [](int i) { cout << i << endl; });
}

auto print_int = [](int i) { cout << i << endl; };
int f2(vector<int> v) {
    for_each(v.begin(), v.end(), print_int);
}

我认为是的,这些问题适用于 C++,并且f2会比f1; 但是,我一直无法找到明确的答案。

标签: c++performancec++11lambdaanonymous-function

解决方案


不,现实生活中的编译器不会有性能差异,因为 C++ 编译器可能会为这两个函数生成完全相同的汇编代码。

通常,您不应将专为脚本语言设计的指南应用于编译语言,因为它们在编译阶段发生的事情(因此与运行时性能无关)与运行时发生的事情有很大不同。


推荐阅读