c++ - 什么时候评估 lambda 函数中的表达式?

标签 c++ lambda

给定这个小片段:a 和 b 在编译时是未知的。 Map 是 vector 的映射函数,将 lambda 函数映射到 bar 的每个元素上。假设调用 fooify() ... a/b 会在执行 map() 之前被评估为常量,还是会在每次调用 lambda 时评估?

Foo::fooify(vector<float>& bar){
  float a = getA();
  float b = getB();
  map(bar, [&](float c){c*(a/b);});
}

最佳答案

我怀疑 a/b 会在每次调用 lambda 函数时被计算。您可以使用以下方法确保它只被评估一次:

Foo::fooify(vector<float>& bar){
  float a = getA();
  float b = getB();
  float ab = a/b;
  map(bar, [](float c){c*ab;});
}

关于c++ - 什么时候评估 lambda 函数中的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816157/

相关文章:

c# - 如何为此创建扩展方法/lambda 函数

node.js - Lambda Nodejs -( Node :1) UnhandledPromiseRejectionWarning: #<Object>

c++ - Qt/QML - 在 C++ 中注册 QML 类型会使 QML 代码不起作用

c++ - 为什么我的代码在 3 轮游戏后不能正确切换玩家名称?

c++ - 在成员函数中,this == NULL 可以吗?

C++ 11 lambda作为成员变量?

c++ - 将具有未知行和列大小的二维数组传递给函数 (C++)

c++ - 在 C++ 中更改对象的动态类型

Java8 在非最终变量上有效地最终编译时错误

python - 需要帮助在不使用 lambda 的情况下重写 Python 函数