关于 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 页book,似乎在示例中忘记了一个逗号,因此我很困惑。
最佳答案
语法无效。它缺少逗号(很可能是拼写错误):
(vec.push_back(ts), ...)
// ^
所以它是“一元右折”:
( pack op ... )
op
是一个逗号。
关于c++ - 为什么这个 C++ 折叠表达式有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777242/