24

私はこれを試しました:

#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

はい、別の「通常の」関数を作成して動作させることができることはわかっていますが、ラムダはそのようにオブジェクトを初期化できません。

4

1 に答える 1

41

はい、実際に可能です。

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

()末尾に注意してください。ラムダに割り当てmyMapていますが、実際にはラムダの結果に割り当てたいと考えています。そのためにそれを呼び出す必要があります。

于 2013-03-22T23:57:11.133 に答える