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

-Wunused-but-set-variable is emitted when I use 'auto' and not when I use the corresponding type instead of 'auto'

请考虑以下事项:

#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 关键字时发出警告,and/or,相反,为什么在不使用 auto 时不警告?


std::function<int(int)> 有一个非 trivial destructor,所以可能是一个 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