-当我使用"auto"而不是当我使用相应的类型而不是"auto"时,会发出 Wunused-but-set-variable



请考虑以下事项:

#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

相关内容

  • 没有找到相关文章

最新更新