C++11 ラムダで遭遇したいくつかの例と混同しています。例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << []()->string{return "Hello World 1!";}() << endl;
[]{cout << "Hello World 2!" << endl;}();
string result = [](const string& str)->string {return "Hello World " + str;}("2!");
cout << "Result: " << result << endl;
result = [](const string& str){return "Hello World " + str;}("3!");
cout << "Result: " << result << endl;
string s;
[&s](){s = "Hello World 4!";}; // does not work
cout << s << endl;
[&s](){s = "Hello World 4!";}(); // works!
cout << s << endl;
return 0;
}
最後の括弧が何をしているのかわかりません。コンストラクターとしてラムダをインスタンス化していますか? ラムダのテンプレートは次のとおりです。
[capture_block](parameters) mutable exception_specification -> return_type {body}
これらのインスタンスが機能するには、これらの括弧が必要であることに困惑しています。なぜそれらが必要なのか、誰かが説明できますか?