使用多语句 lambda 进行返回类型推导

2023-11-22

我一直在编写代码,最近发现 g++ 不会警告我某一类问题:根据 C++11 5.1.2.4,如果您的 lambda 不是单个返回语句,则返回类型必须声明为尾随返回类型或为 void。

尽管 g++ 允许编译无效代码(如果它足够有意义),但有没有办法关闭此行为(允许使用-fpedantic在 g++-4.7 中)或至少警告它?

示例代码:

[]() { return 0; } //is fine
[&a]() { a++; return 0; } //is not fine but g++ doesn't warn me
[&a]() -> int {a++; return 0; } //is fine again

C++11 5.1.2.4

实现不得将右值引用类型的成员添加到闭包类型。 如果 lambda 表达式不包含 lambda 声明符,则就好像 lambda 声明符是 ()。如果 lambda 表达式不包含尾随返回类型,则尾随返回类型就好像表示以下类型:

— 如果复合语句的形式为
{ 属性说明符-seq(opt) 返回表达式 ; }
左值到右值转换 (4.1)、数组到指针转换 (4.2) 和函数到指针转换 (4.3) 后返回表达式的类型;

——否则无效。


这是因为它是标准中的缺陷,并且将被更改(参见DR 975):

第975章

似乎不存在任何技术困难 要求当前限制 lambda 的返回类型可以 仅当 lambda 主体由单个 return 组成时才能推论 陈述。特别是,多个 return 语句可以是 如果它们都返回相同的类型,则允许。

我怀疑是否有办法将其关闭。

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

使用多语句 lambda 进行返回类型推导 的相关文章

随机推荐

  • 将json中的所有snake_case键转换为camelCase键

    在Go中 我们如何将JSON中的snake case键递归转换为camelCase键 我正在用 Go 编写一个 http api 此 api 从数据存储中获取数据 进行一些计算并以 JSON 形式返回响应 情况是 数据存储区 Elastic
  • 如何使用 PostgreSQL 中的函数插入多行

    我想使用 PostgreSQL 中的函数在表中插入多行 这是我的桌子 CREATE TABLE mahasiswa nim CHAR 10 nama VACHAR 40 CONSTRAINT pk nim PRIMARY KEY nim 这
  • 请帮助测试 Firefox jQuery ajax 出现 401 时的 CORS 问题

    这让我发疯 jQuery 1 4 2 Windows XP SP3 这是我的测试 加载火狐浏览器3 5 http plungjan name test testcors html works 将文件保存到硬盘并从那里运行 从我的办公室来看
  • 如何从 Visual Studio Code 中使用 Electron 和 Angular 调试应用程序?

    我正在尝试使用最新版本的 Angular 和 Electron 开发一个非常简单的应用程序 为此 我遵循了 Angular 和 Electron 的教程 经过大量的试验和错误 我终于可以启动我的应用程序 源代码在 GitHub 上 我使用
  • jquery 多个事件处理程序

    我已经根据我正在处理的最新项目中的类名定义了事件处理程序 对于前 所有具有类名 foo 的元素都应该以特定的方式响应更改事件 所有类名为 bar 的元素都应该以其他方式响应 现在我的一些元素属于这两个类 即 class foo bar 并且
  • 基类方法可以返回派生类的类型吗?

    根据我读过的其他帖子 这似乎不可能 但我想我会发布我正在尝试做的事情 看看是否有人知道解决方案 我正在尝试将 Clone 方法添加到从 Telerik 开放访问域模型生成的类中 没问题 我能够弄清楚如何将基类添加到生成的实体模型中 以便我可
  • 从 lapply 或带有 print 语句的函数调用时 kable 出现意外行为

    我试图理解使用 knit 包 在 Ubuntu 14 04 上的 RStudio 0 98 977 中 编织 HTML 时 kable 函数的以下两个意外行为 当从 lapply 中两次调用 kable 时 只有第一个调用会在最终的 HTM
  • TObject 包含哪些数据?

    TObject InstanceSize 返回 8 但 TObject 未声明任何数据成员 根据TObject ClassType的实现 前4个字节可以解释为指向对象的TClass元数据的指针 有人知道另外 4 个字节的开销是做什么用的吗
  • WSFederationAuthenticationModule.IsSignInResponse 中存在潜在危险的 Request.Form

    在我的 MVC3 站点中 我避免使用新的 ValidateInput 属性设置 requestValidationMode 2 0 但现在我尝试切换到 WIF 进行身份验证 当 STS 重定向回我的站点时 我收到异常 因为WSFederat
  • 如何检查函数的模板参数是否具有某种类型?

    假设我有一个具有模板类型的函数T和另外两个班级A and B template
  • 如何运行 GCC 预处理器来获取 #define 等宏扩展后的代码?

    GCC 预处理器是否可以生成 C 源代码并过滤掉不相关的源代码 例如 一个 c文件有一个 define切换以定义许多不同的平台 我只对一个平台感兴趣 并且我希望 C 预处理器过滤掉不相关的代码 Does GCC支持这个吗 是的 使用 E o
  • 从 C# 将二进制数据插入 SQL,无需存储过程

    有谁知道是否可以在不使用存储过程的情况下从 C 将二进制数据插入 SQL 字段 例如 将字节数组转换为 base64 或类似的东西 然后使用如下所示的文本命令 String Format update A set B 0 where C D
  • 在 ASP.NET 中使用依赖注入和工厂模式传递服务

    我正在使用 ASP NET Core 我知道框架已经提供了这样的日志记录机制 但用这个来说明我的问题 我正在使用工厂模式来构建 Logger 类 因为我不知道日志记录的类型 因为它存储在数据库中 ILogger 合约 Log string
  • 以编程方式将 Excel 2003 文件转换为 2007+

    我正在寻找一种方法 基本上获取 2003 年旧文件扩展名 xls 的 excel 文件文件夹 并将它们转换为 xlsm 我知道你可以自己进入Excel表并手动完成 但是有没有办法用代码来完成呢 具体使用任何类型的库 这不是我的代码 但我以前
  • SQL 按日期范围内的频率进行分组

    我需要编写一个存储过程 它接受开始日期 结束日期和频率 日 周 月 季度 年 并根据这些参数输出结果集 显然 简单的部分是按日期范围查询 但是如何按频率分组呢 因此 如果有一组像这样的原始数据 Date Count 11 15 2011 6
  • SonarQube 6.1:如何在没有仪表板的情况下查看随时间的变化?

    SonarQube 曾经有仪表板 可以非常方便地显示指标如何随时间变化 甚至还有一个名为 时间机器 的仪表板 如何在 SonarQube 6 1 中查看此类信息 我很欣赏对 泄漏期 的新关注 但这并不是我关心的全部 转到项目的 度量 空间并
  • LibUsbDotNet 调用 UsbDevice.AllDevices 时未找到设备

    我正在执行 LibUsbDotNet 的示例代码 它将返回所有连接的 USB 设备的信息 您可以在下面找到此代码 using System using LibUsbDotNet using LibUsbDotNet Info using L
  • 尝试在 Windows 上重定向 stdout 和 stderr - _fileno(stdout) 返回 -2

    这是我的第一个问题 我即将将一些运行良好的 C 代码从 UNIX 移植到 Windows 它通过管道将 stdout 和 stderr 重定向到自定义 GUI 组件 我需要它来显示来自第三方库的反馈 该第三方库仅将消息输出到 GUI 上的标
  • 在C python中,访问字节码评估堆栈

    给定一个 C Python 帧指针 如何查看任意计算堆栈条目 一些特定的堆栈条目可以通过locals 我说的是其他堆栈条目 我不久前问了一个更广泛的问题 获取 C python exec 参数字符串或访问计算堆栈 但在这里我想重点关注能够在
  • 使用多语句 lambda 进行返回类型推导

    我一直在编写代码 最近发现 g 不会警告我某一类问题 根据 C 11 5 1 2 4 如果您的 lambda 不是单个返回语句 则返回类型必须声明为尾随返回类型或为 void 尽管 g 允许编译无效代码 如果它足够有意义 但有没有办法关闭此