4
如何立即運行lambda而不是存儲它然後運行它?如何立即運行lambda?
不是存儲這樣的拉姆達:
auto lambda = [&](){ std::cout << ++x << '\n'; }
我想立即運行是這樣的:
[&](){ std::cout << ++x << '\n'; }
但是,這給了我這個錯誤消息:
Warning: expression result unused
如何立即運行lambda而不是存儲它然後運行它?如何立即運行lambda?
不是存儲這樣的拉姆達:
auto lambda = [&](){ std::cout << ++x << '\n'; }
我想立即運行是這樣的:
[&](){ std::cout << ++x << '\n'; }
但是,這給了我這個錯誤消息:
Warning: expression result unused
您可以通過在末尾放置圓括號來立即調用lambda,如下所示:
int x = 0;
[&]{ std::cout << ++x << '\n'; }();
// ^^
現在,這將打印出1
...但是爲什麼呢? [](http://stackoverflow.com) – Eric
@Eric:它對初始化靜態變量很有用。 –
@ BenjaminLindley:好點。我已經看到它在JavaScript中使用了很多,但是我認爲這只是由於缺少區塊範圍。這是在C++中這樣做的一個很好的理由 – Eric