在C++中使用Lambda表达式进行初始化

4
我写了以下代码:

我写了以下的代码:

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

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

                       return count;
                   };

出现了错误:error: 在初始化时无法将 '__lambda0' 转换为 'int'

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


1
是的,你正在分配 lambda(函数),而不是它的评估。你需要实际调用 lambda。 - heinrichj
2个回答

8

你没有调用它!确保你这样做:

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表达式中。


我认为这是一个有效的用例。它可能是一个静态局部变量,而lambda表达式可能依赖于其他局部变量。(但是这个示例没有展示任何被捕获的内容。) - Potatoswatter

2

我的代码片段的意思是把__lambda0赋值给static int count而不是返回内部计数吗?

没错。要调用lambda函数,只需在末尾添加()即可。

                   …
               } ();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接