C++ c++;具有隐式返回的lambda?
在下面的代码中,使用c++17C++ c++;具有隐式返回的lambda?,c++,lambda,C++,Lambda,在下面的代码中,使用c++17std::find_if,比较谓词中的返回是必需的 auto it = find_if(V.begin(), V.end(), [](int i) { return i == 1; }); 在可以推断lambda的返回类型的情况下(比如这里它充当谓词),从lambda获得隐式返回似乎是合乎逻辑的,因此可以简单地编写: auto it = find_if(V.begin(), V.end(), [](int i) { i == 1; }); 这有可能吗?是否存在其
std::find_if
,比较谓词中的返回是必需的
auto it = find_if(V.begin(), V.end(), [](int i) { return i == 1; });
在可以推断lambda的返回类型的情况下(比如这里它充当谓词),从lambda获得隐式返回
似乎是合乎逻辑的,因此可以简单地编写:
auto it = find_if(V.begin(), V.end(), [](int i) { i == 1; });
这有可能吗?是否存在其return
-intent和return
-type可以并且将根据使用上下文隐式处理的lambda?对于“缩写”lambda,有一个语法:
auto it = find_if(V.begin(), V.end(), [](int i) => i == 1);
^^ abbreviated-lambda operator token
然而,这被拒绝了,主要原因是,这会给lambdas带来不一致,可能会返回引用:
[](int* p) { return *p; } // returns `int`
[](int* p) => *p // returns `int&`
人们仍然对较短的lambda语法感兴趣,因此它可能会在某个时候出现,可能会使用不同的语法。不,这不是R。第二个lambda有返回类型void
。值得一读:可以有不返回某些内容的lambda,也可以有不执行任何操作的语句。您如何区分您的案例与案例,然后e==1
不应该返回?实际上恰恰相反<如果
是一个模板,并且它的一个参数是从该lambda的类型推导出来的,则code>find_。你要求的是相反方向的演绎我总是很惊讶人们为了节省输入几个字符而愿意走多远。那么,lambda中的语法会突然与代码中的其他任何地方都不同这一事实又如何呢。这难道不令人困惑吗?为什么你想让一门语言以一种你需要知道所有这些额外的“捷径”才能理解我的意思的方式来编写呢。