2016-08-29 9 views
2

新しいC++の17倍の式を学習していて、c++17 fold expressionからこのコードを見ました。Coutの17倍の倍数

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

ではなく、この1:

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

すぎロジックを思わ可能性があり、私の意見では、印刷順序を逆に考えている私は、このコードの動作理由を知っていただきたいと思います。 cppreferenceに見られるように

+0

'std :: cout << ... << args'は(4)' init op ... op pack'にマッチします。 'std :: cout << args << ...'は有効な形式のどれにもマッチしません。 – Michael

+0

なぜ人々はこのフォームを作成しないことを選択しましたか?どのようにして逆の方法でパラメータを取得できますか? –

+0

"*どうやって逆の方法でパラメータを得ることができますか?*"逆転ツールを書く必要があります。これは書くのが非常に難しいでしょう。通常のパック展開では、パックを逆順に展開する方法もありません。 –

答えて

7

、バイナリ折り目は、次の2つの形式持つことができます。Eパック式Iある

Screenshot from cppreference/fold

初期化式です。


(I op E op ...)の形を持っているあなたの(std::cout << args << ...)を、一致して何バイナリ倍はありません。