是否可以用lambda初始化静态变量?

时间:2013-03-22 23:55:08

标签: c++ static 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不能以这种方式初始化对象。

1 个答案:

答案 0 :(得分:34)

是的,确实有可能。

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

注意最后的()。您正在将myMap分配给lambda,但您确实希望将其分配给lambda的结果。你必须为此调用它。