C++中的C++ 17倍表达式

Gab*_*ard 5 c++ fold-expression c++17

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

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

但不是这个:

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

这看起来似乎也很合理,并且在我看来会扭转打印顺序.

Vit*_*meo 9

cppreference所示,二进制折叠可以有以下两种形式:

cppreference/fold的屏幕截图

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


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