gpt4 book ai didi

c++ - C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样怎么办?

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:25 26 4
gpt4 key购买 nike

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;
}

但它在 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 函数可以有一个默认参数。

最佳答案

Lambda 表达式中的默认参数已明确添加到 C++14 的标准中,但在 C++11 中是不允许的。如果你run the code against two different compiler flags in GCC你可以看到这个,一个用于 C++11,一个用于 C++14,并使用 -Wpedantic 标志进行编译,您会看到在为 C++11 编译时,编译器会发出警告(GCC仍然支持它,但告诉你它不符合标准),而在 C++14 中,没有警告。

是的。在 C++14 及更高版本中,Lambda 表达式中的默认参数是有效的。

关于c++ - C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com