c++ - 在其他函数或循环中构造 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++ 编译器可能会为这两个函数生成完全相同的汇编代码。
通常,您不应将专为脚本语言设计的指南应用于编译语言,因为它们在编译阶段发生的事情(因此与运行时性能无关)与运行时发生的事情有很大不同。
推荐阅读
- r - rgl observer3d:如何在选定点上居中查看?
- php - 功能测试通过 twig 渲染方法调用的控制器
- android - Xamarin Forms - 带有居中图标且无文本的 Android 选项卡栏
- python - Sphinx 创建空文档
- amazon-web-services - 禁用 Slack 上的电子邮件链接以使其保留为字符串?
- c++ - 为什么 Visual Studio 以不同的方式处理我的对象?
- linux - 在 docker 容器中运行 cron 的最佳方法
- django - django-celery-beat 不创建表
- regex - Python Regex - 提取包含星号的句子
- php - PHP 包含路径和 EasyApache 4 - 需要更改吗?