Capturing a static variable by reference in a C++11 lambda

前端 未结 2 497
广开言路
广开言路 2020-12-09 00:58

Main question

I\'m trying to compile the following code with GCC 4.7.2:

#include 

int foo() {
    static int bar;
    return [&b         


        
2条回答
  •  南方客
    南方客 (楼主)
    2020-12-09 01:27

    Why are you even trying to capture bar? It's static. You don't need to capture it at all. Only automatic variables need capturing. Clang throws a hard error on your code, not just a warning. And if you simply remove the &bar from your lambda capture, then the code works perfectly.

    #include 
    
    int foo() {
        static int bar;
        return [] () { return bar++; } (); // lambda capturing by reference
    }
    
    int main (int argc, char* argv[]) {
        std::cout << foo() << std::endl;
        std::cout << foo() << std::endl;
        std::cout << foo() << std::endl;
        return 0;
    }
    

    prints

    0
    1
    2
    

提交回复
热议问题