我不知道如何命名标题,希望它是正确的...
我偶然发现下面的lambda定义,并且不了解语法,而var = [=]
and是return [=]
什么意思?
还有ConstexprLambda()
下面函数中的第二个问题,为什么我们不能必须调用add(1, 2)
而不是add(1, 2)()
为什么()
在调用identity(123)
代码时不需要使用额外的附加值()
呢?
问题被放入代码注释中。
auto identity = [](int n) constexpr
{
return n;
};
constexpr auto add = [](int x, int y)
{
auto L = [=] // what is = [=]?
{
return x;
};
auto R = [=]
{
return y;
};
return [=] // what return [=] means here?
{
return L() + R();
};
};
void ConstexprLambda()
{
static_assert(identity(123) == 123);
static_assert(add(1, 2)() == 3); // why can't we just add(1,2) like above?
}
该示例取自此处
让我们从类型开始
auto identity = [](int n) constexpr
{
return n;
};
这identity
是一个存储type的可调用对象的包装器lambda(int)
。您也可以使用std :: function:
std::function<int(int)> identity;
因此,identity
请在调用它时int
返回an int
。
add
另一方面,在调用时,取两个int
s并返回一个callable。
您需要调用,add(1, 2)
因为的返回类型add
是可调用的,否则add(1, 2)() == 3
由于类型不匹配而无法进行比较。
查看活在螺栓上的类型
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句