折り畳み式は、タプルの各要素に関数を適用するうえで便利です。ただし、適用された関数に副作用がある場合は、関数呼び出しの順序が重要な問題になる可能性があります。折り畳み式の評価順序
は考えてみましょう:
#include <iostream>
template<typename... Ts>
void printStuff(Ts... args)
{
(([](auto&& v) { std::cout << v << " "; })(args), ...);
std::cout << '\n';
}
int main()
{
printStuff("hello", 42, 1.5f);
// expected output: hello 42 1.5
}
ここで保証されているラムダの評価の順番ですか、値が出力されてしまうことになりますか?コマンドを連鎖させるために別の演算子を使用した場合、答えは変わりますか?
シーケンスされたコンマ演算子を使用します。 – Jarod42