【发布时间】:2019-09-13 21:42:37
【问题描述】:
在 c++ 14 中 lambda 函数是否更改为接受默认参数?
此示例不适用于 C++ 11:
int main() {
int i = 34;
auto RectSurf = [i](int length = 0, int width = 0){ return length * width;};
cout << RectSurf(10) << endl;
std::cout << std::endl;
}
但它在 C++ 14 及更高版本上运行良好。那么它是否正确?因为 C++ prime 5ed 说:“将参数传递给 Lambda 与普通函数调用一样,对 lambda 的调用中的参数用于初始化 lambda 的参数。像往常一样,实参和参数类型必须匹配。与普通函数不同,lambda 可能没有默认参数(第 6.5.1 节,第 236 页)。因此,对 lambda 的调用始终具有与 lambda 具有参数一样多的参数。一旦参数被初始化,函数体就会执行。
作为一个接受参数的 lambda 示例,我们可以编写一个行为类似于我们的 isShorter 函数的 lambda:“来自 C++ Prime 5ed。
但在 C++14 及更高版本上的相同代码可以正常工作!但我也在 S.O 中读到 lambda 函数可以有一个默认参数,条件是 Lambda 的捕获列表中没有捕获任何变量。
【问题讨论】:
标签: c++ c++11 lambda c++14 default-arguments