为什么我得到一个未使用的lambda捕获警告?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (10)

我正在传递一个带有一个捕捉到的循环计数器的λ,就像这样:

#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和clang++最多3.9.1,这一切都编译无警告。然而,对于clang++5.0 SVN,我得到

18:20:警告:LAMBDA捕获‘I’不需要被捕获-Wuse-lambda-捕获S.for_每个(&,i=2可变{

可是它仍然打输出正确的答案。

提问于
用户回答回答于

扫码关注云+社区