【发布时间】:2016-02-02 20:28:53
【问题描述】:
N4191 向 C++ 提出了折叠表达式。那里的定义是这样的
(args + ...)
是一个左折叠(即(((a0 + a1) + a2) + ...),而那个
(... + args)
是一个右折叠(即(... + (a8 + (a9 + a10)))。但是,修改后的论文N4295颠倒了左右一元折叠的定义。
问题:原因是什么?从左到右评估(args + ...) 似乎更直观(至少当您习惯于从左到右的字母表时)。
【问题讨论】:
-
我只想问 Richard 或 Andrew :)
-
我不知道他们的基本原理,但对我来说
(... + args)看起来像是左折叠(((... + a8) + a9) + a10)的子表达式。同样(args + ...)看起来像右折叠(a0 + (a1 + (a2 ...)))的子表达式。 -
@user2079303
a + b + c的左关联通常定义为 (a + b) + c,你使用的是相反的 -
另外,考虑一下二进制折叠的一致性。你真的希望
(std::cout << ... << args)工作......
标签: c++ language-lawyer c++17 associativity fold-expression