【发布时间】:2019-03-29 21:17:12
【问题描述】:
我知道这对于 non-noob C++ 开发人员来说可能看起来很愚蠢,但是这 4 个 lambda 表达式之间有什么区别?
Code:
#include <iostream>
#include <math.h>
#include <functional>
inline double MyFunction(double a, double b, double c) {
return (a + b + c);
}
inline void FunctionWrapper(std::function<double(double)> tempFunct, double value) {
std::function<double(double)> funct;
funct = tempFunct;
std::cout << "result: " << funct(value) << std::endl;
}
int main()
{
double value = 100.0;
FunctionWrapper([](double value) { return MyFunction(value, 1.0, 2.0); }, value);
FunctionWrapper([](double value) -> double { return MyFunction(value, 1.0, 2.0); }, value);
FunctionWrapper([value](double value) { return MyFunction(value, 1.0, 2.0); }, value);
FunctionWrapper([value](double value) -> double { return MyFunction(value, 1.0, 2.0); }, value);
}
好像也一样?使用两种不同的“符号”并将值用作闭包?
【问题讨论】:
-
顺便说一句,所有的 lambda 表达式都彼此不同。即使
auto a = [](){};与auto b = [](){};也不一样,因为它们的类型不同 -
第三个和第四个变种是变量阴影的情况:godbolt.org/z/GlUZbu。这就是为什么最好将所有警告和警告都启用为错误。
-
@Trass3r:根据 C++17,它们实际上格式不正确:stackoverflow.com/questions/52947934/…
-
我知道。它仍然在阴影中。现在也被clang拒绝了。
标签: c++ lambda anonymous-function