std::for_each の戻り値
std::for_each
の戻り値って void
だと思っていたんですが、どうやら第三引数が返ってくるらしい。
#include <vector> #include <iostream> int main(){ std::vector<int> v{1, 2, 3, 4, 5}; std::for_each(v.begin(), v.end(), [](auto n){ std::cout << n << std::endl; })(42); struct adder{ int value = 0; void operator()(int n){ value += n; } }; auto sum = std::for_each(v.begin(), v.end(), adder{}); std::cout << sum.value << std::endl; return 0; } /* output: 1 2 3 4 5 42 15 */
一番最後に処理を追加したい場合とか、副作用がある関数オブジェクトを指定している場合に便利そう。