9

我正在学习新的 c++17 fold expression,我从c++17 fold expression看到了这段代码。我想知道为什么这段代码有效:

template<typename ...Args>
void printer(Args&&... args) {
    (std::cout << ... << args) << '\n';
}

但不是这个:

template<typename ...Args>
void printer(Args&&... args) {
    (std::cout << args << ...) << '\n';
}

在我看来,这似乎也是合乎逻辑的,并且会颠倒打印顺序。

4

1 回答 1

15

正如在cppreference上看到的,二元折叠可以有以下两种形式:

来自 cppreference/fold 的屏幕截图

哪里E包表达式I初始化表达式


没有与您的 相匹配的二进制折叠(std::cout << args << ...),其形式为(I op E op ...).

于 2016-08-29T10:29:32.880 回答