7

cppreference上,我看到折叠表达式有四种类型,一元右、一元左、二元右和二元左。这个折叠表达式的类型是什么?我很难理解为什么它是有效的。

    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 的A Tour of C++ book 的第 244 页,并且似乎在例子中忘记了一个逗号,因此我很困惑。

4

1 回答 1

12

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

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

所以它是“一元右折叠”:

( pack op ... )

op逗号。

于 2019-09-03T18:52:22.733 回答