为什么通过引用捕获变量的 lambda 不能转换为函数指针?

2024-01-11

如果我有一个通过引用捕获所有自动变量的 lambda ([&] {}),为什么不能转换为函数指针呢?常规函数可以像通过引用捕获所有内容的 lambda 一样修改变量,那么为什么不一样呢?

换句话说,我想 lambda 和 a 之间的功能区别是什么?&捕获列表和常规函数,使得 lambda 无法转换为函数指针?


让我们以一个简单的 lambda 为例:

Object o;
auto foo = [&]{ return o; };

类型是什么foo看起来像?它可能看起来像这样:

struct __unique_unspecified_blah
{
    operator()() const {
        return o;
    }

    Object& o;
};

你能创建一个指向它的函数指针吗operator()?不,你不能。该函数需要一些来自其对象的额外信息。这与您无法将典型的类方法转换为原始函数指针的原因相同(没有额外的第一个参数,其中this去)。假设你确实创建了一些 this 指针 - 它如何知道到哪里去o from?

问题的“参考”部分不相关 - 如果您的 lambda 捕获anything,那么它的operator()需要引用对象中的某种存储。如果需要存储,它无法转换为原始函数指针。

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

为什么通过引用捕获变量的 lambda 不能转换为函数指针? 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 使用where语句批量更新mysql

    如何批量更新mysql数据 如何定义这样的东西 UPDATE table WHERE column1 somevalues SET column2 othervalues 具有一些值 例如 VALUES 160009 160010 1600
  • webflux 请求处理程序中 ServerRequest 返回 null 主体

    我已经在 Spring WebFlux 应用程序中设置了身份验证 身份验证机制似乎工作正常 例如 以下代码用于设置安全Web过滤器链 Bean public SecurityWebFilterChain securityWebFilterC
  • AngularJS - 充当单选按钮的 3 按钮组

    使用离子框架 http ionicframework com 我正在尝试创建一组充当单选按钮的三个按钮 如果我点击早餐 我希望午餐和晚餐恢复到正常 白色 状态 早餐变成蓝色 使用我当前的代码 我无法让这个功能工作 尽管我可以让按钮稍微随机地
  • 如何为 groupby DataFrame 创建滚动百分比

    我正在尝试计算每种产品的每月变化百分比 这是我到目前为止所拥有的 我将其用于涉及单个产品的 DataFrame 我对如何将计算应用于包含许多产品和许多月份的结果集感到困惑 示例数据框 product desc activity month
  • 计算整个表的哈希值的最快方法[重复]

    这个问题在这里已经有答案了 我们需要能够计算外部环境的表哈希并将其与内部环境中预先计算的哈希进行比较 这样做的目的是确保外部环境中的数据不被 流氓 数据库管理员篡改 用户坚持这个功能 目前 我们通过计算每个列值的单独散列 对列散列执行位异或
  • python 全局名称“self”未定义

    刚开始学习 python 我确信这是一个愚蠢的问题 但我正在尝试这样的事情 def setavalue self self myname harry def printaname print Name self myname def mai
  • 获取计算高度 - Javascript - 不是 jQuery

    我有两个并排的 div 设置为自动高度 我希望它们具有相同的高度 因此我将它们组合为数组的成员 我递归遍历数组并将最高的高度设置为最高的高度 问题是我尝试获取计算高度的所有操作都导致了错误的值 我已经尝试过以下方法 els x curren
  • 是否值得缓存 Delphi 内存管理器创建的对象?

    我有一个可以创建和销毁数千个对象的应用程序 是否值得缓存和重用对象 或者 Delphi 的内存管理器足够快 多次创建和销毁对象并不是那么大的开销 与跟踪缓存相反 当我说值得时 我当然在寻找以提高性能 根据最近的测试 如果对象创建并不昂贵 即
  • 使用 Outlook 对象模型,我可以获得在 Outlook 联系人中看到的字段吗

    我可以使用 Outlook 对象模型查看全局地址簿 但无论如何使用 csharp 的 Outlook 对象模型我可以获得一个人的以下属性 城市 州 国家 地区 别名 标题 电话 我似乎无法在 AddressEntry 对象上找到这些属性 编
  • 如何使用 CMake 使用 install-export 和 find_package 查找并链接到库?

    您有一个支持 CMake 的库项目 您需要在另一个库或可执行文件中使用它 如何使用CMake查找并链接到库 您可能有以下偏好 编写尽可能少的样板代码 将链接库的内部细节与消费目标解耦 理想情况下 该库的用法应该如下所示 add execut
  • 从失败的变基中恢复

    我在用着git svn通过公司指定的 svn 服务器获得一些 git 的好处 我刚刚有一个 rebase 出了严重的问题 我正在努力找出最好的恢复方法 事情是这样的 首先 我有这个 1 master B C D E feature fix
  • CSS:滚动时背景图像不填充

    在一个非常小的网站上工作 一次性加载 所以有一个 div 保存所有背景图像 最重要的是 即 更高的 z 指数 有一个内容 div 包含所有内容 我可以根据选择的内容轻松切换背景 不幸的是 我注意到如果你在一个小窗口中启动 就会出现滚动条 如
  • 如何在 Angular2 组件中操作 scss 变量

    有没有办法可以更改 Angular2 组件中声明的 scss 变量 我想根据用户选择动态添加主题 因此需要修改 scss 变量 我读到了有关将所有 scss 变量保存在单独的 scss 文件中并将其导入其他 scss 文件中的内容 但是我可
  • 我们可以在 Flutter 中显示一些动态文本以及 Google 地图上的标记吗?

    在 Flutter 中是否有可能实现像这样的图像 我使用 google maps flutter 插件在屏幕上显示 GoogleMap 并使用 BitmapDescriptor 更改地图标记的图标 现在我只是在寻找某种方法来显示标记下方的文
  • 一个 UITableView 中有多个 UITableViewCell 类?

    我正在组合一个 TableView 并且需要在同一个表中使用多个单元格类 例如 我将如何在我的cellForRowAtIndexPath method UITableViewCell tableView UITableView tableV
  • 查询构建器中不存在 Get onlyTrashed()

    我正在尝试从表消息中获取废弃的行 public function trash return this gt onlyTrashed gt where user id this gt u gt orWhere receiver this gt
  • 在 iOS 模拟器中启动 Flutter 应用程序时出错

    我在 iOS 模拟器上启动 Flutter 应用程序时遇到问题 从下面的错误输出来看 这个问题似乎与本地主机连接等有关 但我无法找到如何修复它 我正在运行 MacOS Catalina 版本 10 15 6 19G73 iOS模拟器版本11
  • 编写调用Fortran库的R包

    我正在尝试编写一个调用 Fortran 子例程的 R 包 我正在使用 Rstudio 包模板自动创建一堆文件和目录 In R 我有一个文件 Fpi R Fpi lt function DARTS ROUNDS if is loaded Fp
  • 在 Android 中启动新的 Activity 并完成当前的 Activity? [复制]

    这个问题在这里已经有答案了 目前我正在开始一个新的Activity并打电话finish在当前的一个上 是否有任何标志可以传递给Intent这使得完成电流Activity无需致电finish手动从代码 您可以使用finish 方法或者您可以使
  • 为什么通过引用捕获变量的 lambda 不能转换为函数指针?

    如果我有一个通过引用捕获所有自动变量的 lambda 为什么不能转换为函数指针呢 常规函数可以像通过引用捕获所有内容的 lambda 一样修改变量 那么为什么不一样呢 换句话说 我想 lambda 和 a 之间的功能区别是什么 捕获列表和常