【问题标题】:C++17 fold expression in coutC ++ 17 COUT中的表达式
【发布时间】:2017-01-05 08:17:32
【问题描述】:

我正在学习新的 c++17 折叠表达式,我从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';
}

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

【问题讨论】:

  • std::cout &lt;&lt; ... &lt;&lt; args 匹配 (4) init op ... op packstd::cout &lt;&lt; args &lt;&lt; ... 不匹配任何有效形式。
  • 为什么人们选择不创建这个表单?那么我们如何以相反的方式获取参数呢?
  • "那我们怎样才能逆向获取参数呢?" 你得写一些逆向工具,这很难写。正常的pack扩展也无法逆序扩展pack。
  • @NicolBolas 没那么难……

标签: c++ c++17 fold-expression


【解决方案1】:

正如cppreference 所见,二元折叠可以有以下两种形式:

其中Epack 表达式I初始化表达式


没有与(std::cout &lt;&lt; args &lt;&lt; ...) 匹配的二进制折叠,其格式为(I op E op ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2019-08-22
    • 2020-02-21
    相关资源
    最近更新 更多