18
我传递一个lambda像这样一个init捕获循环计数器:为什么我得到一个未使用的lambda捕获警告?
#include <iostream>
auto sq(int c, int x) { return c * x * x; }
struct S {
template<class Fun>
void for_each(Fun fun) const {
for (auto i = 1; i < 4; ++i) {
fun(i);
}
}
};
int main()
{
S s;
auto sum = 0;
s.for_each([&, i = 2](auto c) mutable {
sum += sq(c, i++);
});
std::cout << sum; // 70 = 1 * 4 + 2 * 9 + 3 * 16
}
对于G ++高达7.0 SVN和铛++高达3.9.1,这一切编译警告免费。然而,对于铛++ 5.0 SVN,我得到
prog.cc:18:20: warning: lambda capture 'i' is not required to be captured for this use [-Wunused-lambda-capture] s.for_each([&, i = 2](auto c) mutable {
即使它仍然打印出正确的答案。 Live Example
问题:为什么我从叮叮中得到这个新的Wunused-lambda-capture
警告?
哦哇,这是应该编译?在捕获前没有定义“我”。有趣。 – DeiDei
@DeiDei是的,这应该给闭合对象一个成员变量'i',初始化为2. – TemplateRex
错误肯定。编辑:疯狂的猜测肯定是错误的。 – AndyG