-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
时不警告?
clang version 12.0.1
gcc (GCC) 11.1.0
Target: x86_64-pc-linux-gnu (artixlinux)
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
请考虑以下事项:
#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
时不警告?
clang version 12.0.1
gcc (GCC) 11.1.0
Target: x86_64-pc-linux-gnu (artixlinux)
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