Lambda 没有自动推断返回类型

2024-01-30

当我回答我自己的问题时https://stackoverflow.com/a/32115498/383779 https://stackoverflow.com/a/32115498/383779,我又有一个疑问了。

In

const CArray<CItem*>& Items=
    (ItemsInput!= nullptr)?
        *ItemsInput
    :
        [this]() -> const CArray<CItem*>&
        {
            CArray<CItem*> InnerItems;
            GetContainer().GetInnerItems(InnerItems, NULL, true);
            return (InnerItems);
        } ()
;

我尝试删除-> const CArray<CItem*>&返回部分,但编译时出现两个错误:

1>FunctionClass.cpp(line of last semicolon): error C2440: 'initializing' : cannot convert from 'void' to 'const CArray<TYPE> &'
1>          with
1>          [
1>              TYPE=CItem *
1>          ]
1>          Expressions of type void cannot be converted to other types


1>FunctionClass.cpp(line of the return statement): error C3499: a lambda that has been specified to have a void return type cannot return a value

有人可以解释为什么吗?难道 lambda 不应该自动推断出要从其 return 语句返回的类型吗?


来自 C++11 标准(N3242 5.1.2/4 它确实是旧规范)

如果 lambda 表达式不包含尾随返回类型,则它是 就好像 Trailing-return-type 表示以下类型:

— 如果 复合语句的形式为

{ 属性说明符-seq opt 返回表达式 ; }

之后返回的表达式的类型 左值到右值转换 (4.1)、数组到指针转换 (4.2),以及函数到指针的转换(4.3);

——否则无效。

因为你的 lambda 不仅仅是返回表达式,返回类型是 void。

这被认为是 C++11 中的缺陷(DR-985 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#975)并且许多编译器甚至在 C++11 模式下也放宽了对 C++14 的这些限制(感谢 @dyp)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lambda 没有自动推断返回类型 的相关文章

随机推荐

  • 动态文本框jquery焦点

    我正在创建一个输入类型的动态文本框 如下所示 代码 我无法将焦点设置在输入类型上 var elem document createElement input elem type text elem id txtParent elem set
  • Ember.js数据如何清除数据存储

    我正在尝试 Ember js 并设置了一个小应用程序 用户可以在其中登录和注销 当用户注销时 我想清除数据存储中当前缓存的所有记录 有没有办法做到这一点 或者我必须强制浏览器重新加载页面 我知道这个问题来自 2013 年 但是自从 Embe
  • 如何提高Python 3.6中的SQLite插入性能?

    背景 我想使用 Python 向 SQLite 插入 100 万条记录 我尝试了很多方法来改进它 但仍然不太满意 数据库使用 0 23 秒将文件加载到内存 搜索pass如下 但 SQLite 加载并插入文件需要 1 77 秒 环境 英特尔酷
  • SoundCloud API v3 Stream 在 Chrome 中无法工作

    几个月来我一直试图让它发挥作用 但仍然不起作用 它在除 Google Chrome 之外的所有浏览器中都能正常工作 问题是音频无法在 Chrome 中传输 这是一个最基本的 JS 小提琴示例 https jsfiddle net sq23u
  • ExtJS 4 应用程序登录和身份验证及权限

    我正在使用新推荐的应用程序结构在 Ext JS 4 上开发一个 Web 应用程序 因此我需要实施一个身份验证和权限系统 到目前为止的想法 服务器负责保证用户的角色和权限 ExtJS前端必须根据权限和角色进行更改 我使用卡片布局 第一个选项卡
  • 使用 Nodejs 面对 api

    我正在使用使用 Node js 的 Azure Face api 下面是代码 然而 我想使用本地图像并发布它 而不是托管一些图像 我尝试了不同的选项 但它无法识别图像格式或无效的图像网址 以下是我尝试过的事情 1 var stream fs
  • 知道hadoop中数据节点的磁盘空间吗?

    有没有一种方法或任何命令可以让我了解每个数据节点的磁盘空间或总集群磁盘空间 我尝试了命令 dfs du h 但似乎我没有权限对许多目录执行它 因此无法获取实际的磁盘空间 From UI http namenode 50070 dfsheal
  • 为什么在 JpaTransactionManager 中使用 jpadialect

    我正在从 Spring in Action 学习 spring 3 0 那里讨论了在 JpaTranactionManager 中使用 jpadialect 的重要性
  • 使用 !source 的 gitconfig 别名不起作用 (zsh)

    我有一个像这样的 gitconfig alias l source githelpers pretty git log 当我运行它时 我得到这个 desktop git l source githelpers pretty git log
  • 设置 geopandas 地图的中心

    我可以用 geopandas 绘制世界地图 world geopandas read file geopandas datasets get path naturalearth lowres fig ax plt subplots worl
  • 使用 opencart 获取多商店设置的商店 ID

    我们设置了多个商店 我想稍微更改每个商店的模板 我仔细查看了已经存在的代码并发现了这些 this gt config gt get config store id this gt load gt model setting store re
  • 如何获取 Windows 版的 python-dev?

    我们正在尝试安装 PIL 并收到错误 error command gcc failed with exit status 1 许多类似的问题 包括这个 安装 Reportlab 错误 命令 gcc 失败 退出状态为 1 https stac
  • 如何在“

    余烬绑定数据属性指南 https guides emberjs com v2 10 0 templates binding element attributes 说 如果您使用带有布尔值的数据绑定 它将添加或删除指定的属性 我正在尝试使用此
  • 哪个系统调用返回连接到 Linux 系统的设备列表?

    我正在尝试编写一个 C Java 程序 它将显示连接到系统的设备列表 非常感谢在这方面的任何帮助 lsusb http www cyberciti biz faq linux how do i list all usb devices 命令
  • iOS EXC_BAD_ACCESS:如何调试?

    我收到 EXC BAD ACCESS 我知道这通常意味着什么 尝试访问 不再 的对象是最可能的原因 那么 我在哪里可以找到它 我在网上看了很多帖子 他们都说 方案中 启用 NSZombie 现在 当我运行调试器时 我应该查看什么 我看不出有
  • Thread.join 和 Synchronized 有什么区别?

    我很困惑何时使用Thread join 以及何时使用synchronization在多线程应用程序中 根据我的说法 它们都阻塞或等待其他线程完成执行 此示例必须按顺序模式依次输出 10 个 A 10 个 B 和 10 个 C 如下所示 1
  • template 与 template 不匹配是一个缺陷吗?

    在探索的同时这个答案 https stackoverflow com a 47730794 1366368我发现采用参数包的模板不会被需要具有特定数量参数的模板的模板所接受 在我看来 这是一个缺陷 因为如果模板可以采用任意数量的参数 它应该
  • 在纹理数组中绘制Texture2D图集

    如何通过 GLSL Sampler 仅绘制存储在纹理数组中的纹理2D 图集的一部分 例如 我有纹理图集 我会将它们放在一起 与相同大小的其他图集 在Texture2D数组里面 glTexSubImage3D 那么 在这种情况下我的采样器应该
  • 为什么我们需要快速正文解析器?

    我遇到了很多博客和文章 他们建议使用 body parser 来解析请求正文数据 有没有办法在不使用任何中间件的情况下解析数据或从正文获取正文数据 默认情况下 express 只为您提供原始 HTTP 请求正文req论证作为Incoming
  • Lambda 没有自动推断返回类型

    当我回答我自己的问题时https stackoverflow com a 32115498 383779 https stackoverflow com a 32115498 383779 我又有一个疑问了 In const CArray