2013-03-22 47 views
12

我已经试过这样:是否可以用lambda初始化静态变量?

#include <map> 

int main() { 

    static std::map<int,int> myMap = [](){ 
    std::map<int,int> myMap; 
    return myMap; 
    }; 

} 

错误:

<stdin>: In function 'int main()': 
<stdin>:8:3: error: conversion from 'main()::<lambda()>' to non-scalar type 'std::map<int, int>' requested 

是的,我知道,我可以创造另一种“正常”功能蚂蚁它的工作原理,但lambda表达式不能初始化的对象办法。

回答

31

是的,这确实是可能的。

static std::map<int,int> myMap = [](){ 
    std::map<int,int> myMap; 
    return myMap; 
}(); 

注意在末尾()。您将myMap分配给lambda,但您确实想将其分配给lambda的结果。你必须为此称呼它。

+0

我想你错过了lambda声明中的' - > std :: map ''。 – theV0ID 2014-01-24 13:12:00

+3

@ theV0ID,如果可以从返回语句中推导出返回类型,则返回类型对于lambda表达式不是必需的(因为它可以在这里)。 (注意:如果参数列表是空的,因为它在这里,所以它也是可选的。因此,这可以写成:'static auto myMap = [] {return std :: map ();}(); ') – 2016-04-20 23:24:58