关于将临时绑定到构造函数中的引用成员的虚假警告

2024-03-16

据我所知,如果临时对象绑定到构造函数的初始值设定项列表中的引用成员,则该对象将在构造函数返回时被销毁。

However,考虑以下代码:

#include <functional>
#include <iostream>

using callback_func = std::function<int(void)>;

int
func(const callback_func& callback)
{
  struct wrapper
  {
    const callback_func& w_cb;
    wrapper(const callback_func& cb) : w_cb {cb} { }
    int call() { return this->w_cb() + this->w_cb(); }
  };
  wrapper wrp {callback};
  return wrp.call();
}

int
main()
{
  std::cout << func([](){ return 21; }) << std::endl;
  return 0;
}

这对我来说看起来完全有效。这callback对象将在整个执行过程中存活func函数,并且不应为其制作临时副本wrapper的构造函数。

Indeed, 海湾合作委员会4.9.0启用所有警告后编译正常。

然而,海湾合作委员会 4.8.2编译器给我以下警告:

$ g++ -std=c++11 -W main.cpp 
main.cpp: In constructor ‘func(const callback_func&)::wrapper::wrapper(const callback_func&)’:
main.cpp:12:48: warning: a temporary bound to ‘func(const callback_func&)::wrapper::w_cb’ only persists until the constructor exits [-Wextra]
     wrapper(const callback_func& cb) : w_cb {cb} { }
                                            ^

这是误报还是我误解了对象的生命周期?

以下是我测试的确切编译器版本:

$ g++ --version
g++ (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (GCC) 4.9.0 20140604 (prerelease)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

这是 gcc 4.8 中的一个错误,已在 4.9 中修复。这是错误报告:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50025 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50025

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

关于将临时绑定到构造函数中的引用成员的虚假警告 的相关文章

随机推荐

  • Line3DCollection 多彩线条边缘呈“锯齿状”

    基于matplotlib 示例代码 http matplotlib org examples pylab examples multicolored line html我构建了一条彩色线条的 3D 版本 我正在 jupyter 笔记本中工作
  • Smullyan 数值机的解决方案

    在这里我建议找到 Smullyan 数值机的解决方案 此处定义 http heras gilsanz com manuel smullyan machines html 问题陈述 它们是接受数字列表作为输入 并根据输入模式遵循一些规则将其转
  • JavaScript 字符串替换与replaceAll

    ECMAScript 2021 添加了新的 String 函数replaceAll 很久以前 在一个不远的星系里 人们使用split join或正则表达式替换所有出现的字符串 https stackoverflow com question
  • 使用 POST 进行 jQuery 缓存

    虽然我在 jQuery AJAX Post 请求中设置了 cache false 但它不会添加额外的 randomg 字符串 这是因为 post 不缓存吗 感谢您的时间 RFC 2616 http www faqs org rfcs rfc
  • 将 TextField 限制为特定的数字范围 JavaFX?

    您好 我需要限制 TextField javaFX 的输入 不仅适用于整数 还适用于 1 19 之间的数字 例如 我应该允许输入 3 19 但不能输入 33 44 例如 在 JavaFX 中创建数字 TextField 的推荐方法是什么 h
  • 如何查看Linux线程的状态?

    如何使用代码而不是工具来检查 Linux 线程的状态 我想知道线程是否正在运行 被锁阻塞或因其他原因而休眠 我知道 Linux 工具 top 可以完成这项工作 但如何在我自己的代码中实现它 谢谢 我认为你应该详细研究 proc http l
  • 对函数体评估感到困惑

    我对以下行为感到困惑Function In 1 InlineCellInMessage Function expr DisplayForm Cell BoxData MakeBoxes expr StandardForm Input Hol
  • XSLT:将平面列表转变为层次结构

    我尝试了解 XSLT 2 0 中的分组功能 我的源文件是
  • Flash/ActionScript 3.0 中的 StackTrace

    我想在代码的任何函数中查看堆栈跟踪 因此我做了类似的事情来调用它并打印堆栈跟踪 public function PrintStackTrace try throw new Error StackTrace catch e Error tra
  • 合并两个多维数组并重新索引所有子数组

    我有两个数组 我想将这两个数组合并为单个数组 请查看下面的详细信息 第一个数组 Array 0 gt Array a gt 1 b gt 2 c gt 3 1 gt Array a gt 3 b gt 2 c gt 1 第二个数组 Arra
  • 我可以将 CSS3 与 XHTML 1.0 一起使用吗?

    我可以将 CSS3 属性与 XHTML 一起使用 还是仅与 HTML5 网页一起使用 HTML版本和CSS之间有关系吗 还是完全没有关系 Thanks 如果浏览器支持 CSS3 和 XHTML 1 0 则可以同时使用两者 这两个标准彼此之间
  • github“网络推送通知”如何工作?

    github 似乎在其 Web 界面上使用轮询服务器进行实时通知 live github com 看起来该技术既不是基于 Websocket 也不是 XHR 轮询 它是如何开发的 他们似乎使用 HTML5 服务器发送事件 一段时间后 我通过
  • 为什么暂存目录也称为 Index/Git Index?

    我对 Git 中的暂存目录 Git Index 的命名感到困惑 叫Index有什么特殊含义吗 为什么不直接称为Cache 或Temp目录以便我们更容易理解呢 对我来说 索引可以帮助我们更快地搜索内容 就像 DBMS 中的索引一样 它与暂存区
  • 如何设置 Amazon S3 存储桶预签名 URL 过期时间(从当前日期算起 1 年内)

    图像上传到 Amazon S3 存储桶 我需要得到一个预签名 URL来自亚马逊服务器 我还想设置该 URL 的到期时间 这最多只需要 17 天 但我无法设置最多 1 年的到期时间 Calendar cal Calendar getInsta
  • 如何 Invoke-Expression 调用带有变量的函数或脚本?

    我使用此脚本收到无效路径错误 buildZIP starmatic echo buildZIP command XXXXXXXXXX L Gopi Prod App ToZipNew ps1 buildZIP Invoke Expressi
  • JPA 配置布尔字段以保留为整数

    在 JPA 中 有一个注释指定布尔字段应保留为整数 我正在使用 OpenJPA 它当前将布尔字段保留为位 我宁愿使用整数 1 或 0 您可以指定列定义 Column name boolColumn columnDefinition INT
  • 导航栏不显示

    这里我有2个看法 欢迎VC WebViewVC First 应用程序代理 calls 欢迎VC通过下面的代码 void presentWelcomeViewController WelcomeViewController welcomeVi
  • 为每个 cURL 请求返​​回 AJAX 结果

    基本上 我的想法是做某种形式的 实时 cURL 结果 正在生产的系统实时结果例如 当执行每个请求时 我将有一个表 其中包含需要通过 cURL 请求访问的网站列表 其中根据每个 cURL 响应的结果 我需要使用 AJAX 将数据发送回我的页面
  • 循环语句的 freemarker 模板

    我想在 freemarker 模板中创建 for 语句 我正在阅读指南http freemarker sourceforge net http freemarker sourceforge net 但只有清单 我如何创建 for 语句或 f
  • 关于将临时绑定到构造函数中的引用成员的虚假警告

    据我所知 如果临时对象绑定到构造函数的初始值设定项列表中的引用成员 则该对象将在构造函数返回时被销毁 However 考虑以下代码 include