首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的lambda返回类型

C++中的lambda返回类型
EN

Stack Overflow用户
提问于 2016-10-22 19:24:46
回答 1查看 2.2K关注 0票数 7

Lambda具有函数体,该函数体包含不指定返回类型返回空的单个返回语句以外的任何内容。通过“C++底座”第5版,第389页。 但是,如果我们使用if语句编写看似等效的程序,我们的代码将不会编译: //error:无法推断lambda的返回类型。转换( vi.begin()、vi.end()、vi.begin()、int I { if(i < 0)返回-i;否则返回i;} ); 通过“C++底座”第5版,第396页。

我用Visual编写了一个程序:

代码语言:javascript
复制
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(void) {
    vector<int> vi{ 1, -2, 3, -4, 5, -6 };
    /* Is the return type void? */
    transform(vi.begin(), vi.end(), vi.begin(), [](int i) {
                                                    if (i < 0) return -i;
                                                    else return i; });

    for (int i : vi)
        cout << i << " ";
    cout << endl;

    system("pause");
    return 0;
}

但它可以正常运行。

然后,在Visual中添加一些语句:

代码语言:javascript
复制
auto f = [](int i) {
                    if (i < 0) return -i;
                    else return i; };

当我将光标移动到f时,它将显示f的返回类型为int。

为什么会这样呢?

我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-22 19:29:19

C++初级版第5版涵盖了C++11,在C++11中,你引用的陈述是真实的。但是,C++14支持在更多情况下推断返回类型。,包括当一个lambda有多个返回语句时,只要它们都返回相同的类型。想必您的Visual版本支持C++14,或者至少支持它的这个特性。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40196142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档