Ita*_*iwa 2 c++ lambda default-arguments c++11 c++14
lambda函数是否更改为接受c ++ 14中的默认参数?
此示例不适用于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;
}
Run Code Online (Sandbox Code Playgroud)
但是它在C ++ 14及更高版本上可以正常工作。如此正确与否?因为C ++ Prime 5ed表示:“将参数传递给Lambda与普通函数调用一样,对Lambda的调用中的参数用于初始化Lambda的参数。通常,参数和参数类型必须匹配。与普通函数不同,lambda可能没有默认参数(第6.5.1节,第236页),因此,对lambda的调用始终具有与lambda具有参数一样多的参数,一旦参数初始化,函数主体就会执行。
作为带有参数的lambda的示例,我们可以编写一个行为类似于isShorter函数的lambda:“来自C ++ Prime 5ed。
但是在C ++ 14及更高版本上使用相同的代码就可以了!但我也在SO中读到过,如果Lambda的捕获列表中没有捕获任何变量,则lambda函数可以具有默认参数。
Lambda表达式中的默认参数已通过C ++ 14明确添加到标准中,而在C ++ 11中则不允许。如果您在GCC中针对两个不同的编译器标记运行代码,就可以看到此代码,一个标记用于C ++ 11,一个-Wpedantic标记用于C ++ 14,然后使用该标记进行编译,您会看到,为C ++ 11编译时,编译器会发出警告(GCC仍然支持它,但会告诉您它不符合标准),而在C ++ 14中则没有警告。
是的 在C ++ 14和更高版本中,Lambda表达式中的默认参数有效。