lambda 捕获变量的规则

2023-12-24

例如:

class Example
{
public:
    explicit Example(int n) : num(n) {}
    void addAndPrint(vector<int>& v) const
    {
        for_each(v.begin(), v.end(), [num](int n) { cout << num + n << " "; });
    }
private:
    int num;
};

int main()
{
    vector<int> v = { 0, 1, 2, 3, 4 };

    Example ex(1);
    ex.addAndPrint(v);
    return 0;
}

当您在 MSVC2010 中编译并运行它时,您会收到以下错误:

错误 C3480: 'Example::num': lambda 捕获变量必须来自封闭函数作用域

但是,使用 g++ 4.6.2(预发行版),您将获得:

1 2 3 4 5

根据标准草案哪个编译器是正确的?


5.1.2/9:

局部 lambda 表达式的到达范围是以下集合 封闭范围直至并包括最内层封闭函数 及其参数。

和 5.1.2/10:

使用通常的规则查找捕获列表中的标识符 用于非限定名称查找(3.4.1);每个这样的查找都会找到一个 在到达中声明的具有自动存储持续时间的变量 本地 lambda 表达式的范围。

As num既没有在任何函数作用域中声明,也没有自动存储持续时间,因此无法捕获。因此 VS 是正确的,而 g++ 是错误的。

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

lambda 捕获变量的规则 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • aws Lambda 在 S3 上传时使 CloudFront 失效

    我同时上传 10 50 个文件 Lambda 会为每个更新的文件触发一个事件 如果文件大小发生变化 因此 我不想一一失效 50x 而是想运行通配符 上传结束时出现一次字符 任何人都可以阐明如何实现这一目标 谢谢 如果我正确理解你的问题 你的
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • Android 的 setDrawingCacheEnabled() 是如何工作的?

    我有一个 UI 其中根布局是relativelayout 它有许多视图 例如字段 按钮等 还有另外两个面板最初是不可见的 当用户单击按钮时 其中一个面板从左侧滑入 另一个从底部滑入 问题是 Nexus S 的帧速率很低 我想使用 setDr
  • 如何在 Python 中打印“漂亮”的字符串输出

    我有一个字典列表 其中包含来自 sql 查询的字段 classid dept coursenum area 和 title 我想以人类可读的格式输出这些值 我正在考虑在每列顶部添加一个列标题 然后在每列中添加适当的输出 即 CLASSID
  • 当 HTML 中请求时,使用 PHP 生成 JavaScript 文件

    当 HTML 程序中请求时 如何使用 PHP 生成 JavaScript 文件 我想要一个像这样的 PHP 程序 当请求某个 JavaScript 文件时 它可以在服务器上运行 示例代码 我知道那是非常假的代码 但当我不知道该怎么做时 这就
  • 在 Android Kiosk 应用程序上显示 USB 权限对话框?

    因此 我有一个使用 startLockTask 命令固定到设备的应用程序 它有几个限制 因此用户无法退出应用程序或更改设备的设置 但是 用户应该能够通过 USB 将文件从设备传输到计算机 但是当设备连接到 新 PC 时 USB 权限对话框
  • Delphi XE5 应用程序启动时出现访问冲突

    在两台计算机上没问题 在三台计算机上存在相同的异常 并且 AV 地址相同 感谢您的帮助 begin Application Hinthidepause 30000 Application Initialize Application Mai
  • 如何为你的 JavaScript 制定计划

    我接触的 Web 开发主要是前端 HTML CSS 以及一些用于简单动画的 JQuery 不过 我现在正在做一个相当大的项目 这将包括大量涉及对象调用 AJAX 调用等的 JavaScript 函数 我对功能和所有这些都有很好的掌握 但随着
  • 清除 NodeJS REPL 控制台的命令历史记录

    我使用的是 NodeJS 版本 4 2 1 我想知道完全清除 NodeJS REPL 控制台历史记录的命令 这样当按下向上或向下箭头键时它就不会显示以前执行的命令 有什么建议 答案其实很简单 在 Windows 上 我的版本是 10 转到用
  • 重新启动时重新进行身份验证 - Android

    每次调用 onRestart 时 我都需要重新验证用户凭据 通常这意味着用户已锁定和解锁屏幕或将其置于后台然后返回 所以我这样做了 Override protected void onRestart super onRestart Inte
  • DRF:相关序列化器上的自定义排序

    我有两个序列化器 一个用于讲师 一个用于课程 讲师序列化程序与课程具有定义的关系 如下所示 courses CourseSerializer many True read only True 如何在讲师序列化程序中指定课程的顺序 注意 我已
  • RStudio 服务器导出功能背后的代码

    我目前正在使用 RStudio serverLinux redhat RStudio server 的一个很好的功能是我可以从服务器导出到我的Windows桌面 有谁知道导出下拉菜单背后的代码 导出功能可以通过以下方式找到Files tab
  • 为什么我从 npm 运行 Jest 时得到 0 覆盖率?

    我正在尝试使用 Jest 获取单个 Vue 组件的代码覆盖率数字 假设我的组件是 var www html path to Component vue其对应的单元测试文件为 var www html path to tests unit C
  • 真正的转义字符串与绑定参数

    在 php 中 使用 mysqli 有什么区别 哪个更好以及为什么 我有一个用真正的转义字符串编写的整个项目 是否有必要转换为面向对象的准备语句 从程序员的角度来看 手动转义值与 PDO 实现的参数化 准备语句之间的区别在于分离程度 自动化
  • 如何仅签署 XML 的特定部分

    我试图通过仅签署 xml 的一部分来进行一些 XML 签名 但是经过多次搜索后我无法找到解决方案 我正在使用 java 通过 Xpath2 转换和 EXCLUSIVE 规范化对 XML 进行签名 如果我有以下 XML
  • JavaScript 是否提供高分辨率计时器?

    JavaScript 是否提供高分辨率计时器 我从头开始编写了一些游戏引擎 有些是用 C 编写的 有些是用 Java 编写的 有些是用 Flash 编写的 在动画和交互式图形方面 我始终遵循相同的基本模型 使用以下设计创建一个基本类 结构
  • Rails“公共”文件夹中文件的自定义内容类型

    对于存储在 ruby on rails 应用程序的 public 文件夹中的资产 是否可以在运行 script server 时更改 Content Type 例如 我正在尝试创建一个支持离线模式的 HTML5 应用程序 并且有一个 off
  • SSIS - 插入新行、更新行

    检查哪一行已更改以及哪些行已存在的 最佳 或推荐方法是什么 我发现了一些文章 但我不确定这些方法是否是最好的 http www ssistalk com 2007 03 09 ssis using a checksum to define
  • Jmeter - 嵌入变量和 $ 的正则表达式问题

    问候 在 Jmeter 的正则表达式组件中 当表达式同时具有变量和文字 时 我遇到了一个问题 它总是返回失败 当我用硬编码值替换变量时 它工作得很好 我已经验证该变量在上次调用中返回了预期值 失败的表达 变量和文字
  • MVC 6 中 @Json.Encode 或 @Json.Decode 方法在哪里?

    相当于MVC5的什么 Json EncodeMVC6 中的方法 在 MVC5 中 我们可以在视图中访问这些方法 但我找不到任何可以从 MVC 6 视图访问的方法 如果 MVC6 中已经有内置功能 我不想编写辅助方法 经过一番查找 找到了 i
  • NSDate、NTP 和载波时间

    我刚刚在文档中读到 Cocoa 根据网络时间协议 NTP 标准来实现时间 该标准基于协调世界时 我正确地假设 OSX 正在与互联网同步 对吗 iOS 设备呢 相同的 NSObject NSDate NSCalendar 等 是否也与互联网同
  • lambda 捕获变量的规则

    例如 class Example public explicit Example int n num n void addAndPrint vector