在c ++中通过lambda表达式初始化

时间:2014-02-28 07:09:11

标签: c++ lambda

我写下以下代码:

static int count = []()->int
                   {
                       int count = 0;

                       for(int i = 0; i < categories.size(); ++i)
                       {
                           if(!categories[i].isCategory())
                           {
                               count++;
                           }
                       }

                       return count;
                   };

并收到错误:error: cannot convert '__lambda0' to 'int' in initialization

我的代码片段的含义是否将__lambda0分配给static int count而不是返回内部计数?

2 个答案:

答案 0 :(得分:4)

你没有打电话给它!确保你这样做:

static int count = []()->int
                   {
                       int count = 0;

                       for(int i = 0; i < categories.size(); ++i)
                       {
                           if(!categories[i].isCategory())
                           {
                               count++;
                           }
                       }

                       return count;
                   }();
                 // ^^ THIS THIS THIS THIS

但是,恕我直言,你最好不要使用lambda。如果你在代码的其他部分使用它,那么将它放在一个独立的(而不是lambda)函数中。

答案 1 :(得分:1)

  

我的代码片段的含义是否将__lambda0分配给static int count而不是返回内部计数?

完全。要调用lambda,只需在末尾添加()

                   …
               } ();