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

标签 c++ syntax fold-expression

关于 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/

相关文章:

c++ - 如何在 Qt 控制台应用程序中使用 GetNativeSystemInfo

java - Java中有goto语句吗?

objective-c - 如何在 Objective-C 中传递多个参数?

c++ - 满足条件时如何在中间停止折叠表达式函数调用并返回该值?

c++ - 使用折叠表达式为数组实现 less 运算符

c++ - 在 mac os x 上将/usr/local/lib 设为ld 的默认库搜索路径?

c++ - 二维角色的 move 仅在一个方向上有效

c++ - 未排序数组上 cpp 中 lower_bound 的行为

syntax - 元组参数声明和赋值奇怪

c++ - 从一个值和一个大小创建递归函数参数列表