热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实际使用捕获时未使用的lambda捕获警告

如何解决《实际使用捕获时未使用的lambda捕获警告》经验,为你挑选了1个好方法。

这段代码:

void foo(int);
int main() {
    const int i = 0;
    auto l = [i](){foo(i);};
}

(godbolt)

在通过clang编译时会发出编译器错误

-std=c++17 -Werror -Wunused-lambda-capture

错误消息是error: lambda capture 'i' is not required to be captured for this use.

错误是正确的:i可以在这里隐式捕获,明确捕获它是没有必要的.但是,a)警告命名不佳,因为i使用了但是警告是未使用的 lambda捕获,b)我不希望这是一个错误.我希望错误的实际未使用的lambda捕获,但不是错误的已使用显式捕获的变量,可能已被隐式捕获.

是否有铿锵设置这样做?或者我是否必须使用pragma诊断推/弹来压制错误?



1> Shafik Yaghm..:

我觉得你不幸在这里运气不好.如果我们检查实现此功能的评论[Sema]为未使用的lambda捕获添加警告,我们可以看到有关如何使警告静音的讨论被广泛讨论.包括沉默未使用警告的规范铿锵方法,这种方法被转换为无效:

我认为不应该在这里使用预期警告,因为你在lambda中有(void)fname(如果我在本地测试它,我不会收到此警告).

哪个工作看到了它,但对这种情况感到愚蠢.

使用,-Wno-unused-lambda-capture但这不是一个有利的选择:

我认为如果你将"-Wno-unused-lambda-capture"添加到CXX /目录中由此补丁修改的所有测试的选项中,补丁将更整洁.这将避免冗余(void)使用并确保(void)使用不会干扰原始意图,其中事物可能仅在捕获列表中使用.

从捕获中删除变量,因为它没有使用odr,但正如指出这暴露了实现差异,因为MSVC不进行此优化:

如果我从捕获列表中删除kDelta,它将在没有任何警告的情况下编译:

#include 

int main(void) {
  const int kDelta = 10000001;
  auto g = [](int i)
           {
             printf("%d\n", i % kDelta);
           };
  g(2);
}

但是,然后Microsoft C++编译器将引发错误:

error C3493: 'kDelta' cannot be implicitly captured because no default capture mode has been specified

我们也可以看到这个案例,并且确实i从捕获中删除确实为clang和gcc修复了它,但对于MSVC却没有.

适用于所有实现的另一个解决方案是明确捕获,[i=i]但听起来这也不是一个理想的解决方案(请参见实时).

如果我们可以在这里应用[[maybe_unused]]会很好,但我们不能.


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
author-avatar
百脑汇_惠州店_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有