为什么这个 C++ 折叠表达式有效?
Why is this C++ fold expression valid?
在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++ 书的第 244 页,似乎在这个例子中忘记了一个逗号,因此我感到困惑。
语法无效。它缺少一个逗号(很可能是错字):
(vec.push_back(ts), ...)
// ^
所以是 "unary right fold":
( pack op ... )
其中 op
是逗号。
在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++ 书的第 244 页,似乎在这个例子中忘记了一个逗号,因此我感到困惑。
语法无效。它缺少一个逗号(很可能是错字):
(vec.push_back(ts), ...)
// ^
所以是 "unary right fold":
( pack op ... )
其中 op
是逗号。