gpt4 book ai didi

c++ - 使用 auto, decltype, = , [ ] 声明一个函数

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

我在以下位置找到了这样定义的函数:
http://en.cppreference.com/w/cpp/language/decltype

我从来没有见过这种用于定义函数的语法,谁能解释一下?
这似乎只适用于 auto 和 decltype

#include <iostream>
using namespace std;

auto f = [](int a, int b)->int
{
return a * b;
};

/*
int f = [](int a, int b) //DOES NOT WORK
{
return a * b;
};
*/

int main()
{
int a = 2, b = 3;
cout<<f(a,b);
return 0;
}

我不确定下面的函数是否使用了 dectype:

->int      

如果是,那又如何呢?

最佳答案

auto f = [](int a, int b)->int
{
return a * b;
};

这里的f是某种匿名类型的全局变量,保存着定义在operator=之后的匿名函数对象的一个​​实例。这样的匿名函数对象称为 lambda,它们可以出现在任何可以表达的地方:

int main(int, char**) {
([](int a) {
cout << "lambda called with " << a << endl;
})(42);
return ([](int a, int b) { return a - 2 * b; })(42, 21);
}

这种 lambda 表达式的一般语法如下:

"["CAPTURE"]" PARAMETERS ["mutable"] [RETURN] { BODY }

CAPTURE 是零个或多个

的列表
  • 来自封闭范围的变量,按值捕获
  • 来自封闭范围的变量,前面是&,通过引用捕获
  • & 表示通过引用捕获封闭作用域中的所有变量
  • = 表示按值捕获封闭作用域中的所有变量

PARAMETERS 是您从函数中了解到的常用参数列表,可选地(自 C++14 起)具有 auto 和类型推导。

mutable 允许 lambda 改变其捕获的变量。

可选 RETURN 包含返回类型的规范,例如-> voidBODY 包含任意表达式和语句。

请注意,这只是语法的粗略草图,但它应该可以帮助您入门。您可以在标准中找到有关 lambda 的更多信息,在 Google 上搜索“C++11 lambda”或例如 here .

顺便说一句,lambda 并不可怕,您可以将您的 f 看作是以下“旧式”C++ 代码的粗略等价物:

struct {
int operator()(int a, int b) const {
return a * b;
}
} f;

关于c++ - 使用 auto, decltype, = , [ ] 声明一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700860/

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