为什么这个C++折叠表达式有效?

Why is this C++ fold expression valid?

本文关键字:表达式 有效 折叠 C++ 为什么      更新时间:2023-10-16

在cpp首选项上,我看到有四种类型的折叠表达式,一元右,一元左,二进制右和二元左。这里的折叠表达式是什么类型?我很难理解为什么它是有效的。

template <typename Res, typename... Ts>
vector<Res> to_vector(Ts&&... ts) {
vector<Res> vec;
(vec.push_back(ts) ...); // *
return vec;
}

如果有任何的话,*行中的"pack","op"和"init"的值是多少?

这个例子来自Bjarne Stroustrup的ATour of C++书的第244页,似乎在示例中忘记了一个逗号,因此我很困惑。

语法无效。它缺少逗号(很可能是错别字(:

(vec.push_back(ts), ...)
//                ^

所以它是"一元右折":

( pack op ... )

op是逗号。