c++ primer lambda表达式疑惑

WechatIMG3.jpeg
c++ primer第5版,书上说如果lambda体中包含return之外的任何语句,则编译器假定此lambda返回void。与其他返回void的函数类似,被推断返回void的lambda不能返回值。

我按照书上的例子写了下,基于c++ 11 14都能正常编译运行,请问下我哪里理解错了?

#include <bits/stdc++.h>
using namespace std;


int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr)/sizeof(arr[0]);

    transform(arr, arr+n, arr, [](int i){if(i<0) return -i;else return i + 1;});

    for (int i=0; i<n; i++)
        cout << arr[i] << " ";

    return 0;
}
阅读 2.7k
1 个回答

这个从 c++14 开始就不是这样了。没有 trainling return type 的 lambda 返回 auto ,由函数体推断。

你还可以在 gcc 4.6 里看到 c++11 的行为。最后一个版本是 4.6.4,2013.4.12 发布

从 gcc 4.7 开始(4.7.0 2012.3.22 发布),c++11 的这一个行为已经不再支持,即使指定 -std=c++11/-std=c++0x

这里可以测试不同版本的编译器。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题