gpt4 book ai didi

c++ - 使用 -Wall 和 -Wextra 对未使用的 lambda 没有警告

转载 作者:行者123 更新时间:2023-12-03 07:00:19 24 4
gpt4 key购买 nike

通常,如果您有一个 lambda 而忘记使用它,您会像任何其他未使用的变量一样收到警告(如果已启用)。

auto foo = [](){};
会产生 warning: unused variable 'foo'或类似。
但是,如果 lambda 捕获有副作用(例如增加 shared_ptr 的引用计数),您将不会收到警告。
auto x = std::make_shared<int>(23);
auto foo = [x](){ bar(*x); };
所以,没有创建我自己的 [[nodiscard]]函数对象的包装器,是否有我遗漏的任何额外警告标志或会发现此错误的静态分析工具?
主要是 gcc 用户,尽管会使用 clang 以及相同的代码库进行构建。

最佳答案

在你的程序中没有什么值得警告的。至少,任何可能产生的警告都不属于 -Wunused 的类别。 .这组警告是针对程序中对程序行为没有影响的声明,暗示程序员错误。这通常是未使用的声明的情况,因为声明本身通常没有任何可观察到的副作用。
但是,在您的代码中,声明 foo确实有一个明显的副作用:

auto x = std::make_shared<int>(23);
std::cout << x.use_count(); // prints 1
auto foo = [x](){ bar(*x); };
std::cout << x.use_count() // prints 2
这是一个 demo .
所以我不认为任何 -Wunused警告将适用于该程序。

关于c++ - 使用 -Wall 和 -Wextra 对未使用的 lambda 没有警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64741559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com