请考虑以下事项:
#include <functional>
int main() {
std::function<int(int)> f_sq = [](int i) -> int { return i *= i; }; // No warning
auto f_sub = [](int a, int b) -> int { return a - b; }; // -Wunused-but-set-variable
return 0;
}
为什么当使用auto
关键字时编译器会发出警告,而/或者相反,为什么当不使用auto
时编译器不会发出警告?
clang version 12.0.1
gcc (GCC) 11.1.0
Target: x86_64-pc-linux-gnu (artixlinux)
std::function<int(int)>
有一个非平凡的析构函数,所以可能是一个RAII对象。
你的lambda(记住,lambda不是std::function
)有一个简单的析构函数,所以它不是一个RAII对象,所以它实际上是未使用的。
您可以使用更简单的类型最小化示例以避免混淆lambda/std::function
:
std::vector<int> v = {4, 8, 15, 16, 23, 42}; // No warnings
int n = 42; // -Wunused-but-set-variable