9

私は新しい c++17 フォールド式を学んでおり、このコードはc++17 フォールド式から見ました。このコードが機能する理由を知りたい:

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で見られるように、バイナリ フォールドには次の 2 つの形式があります。

cppreference/fold のスクリーンショット

Eはpackで、I初期化式です。


(std::cout << args << ...)の形式を持つ に一致するバイナリ フォールドはありません(I op E op ...)

于 2016-08-29T10:29:32.880 に答える