11
A
回答
8
从@cpplearner的评论,这里的一些来自std-discussion的考古学
在2015年2月4日星期三凌晨1:30,@T.C. wrote:
在N4295,这是实际投票到标准,
(... op e)
是一元左折叠;
(e op ...)
是一元正确的折叠;在N4191,然而,
(e op ...)
被称为左折叠。
(... op e)
被称为正确的折叠。为什么180度转弯?
而且通过@RichardSmith
在原文件形式回答很干脆一个错字。下面是一些 原因是被评为成标准的定义是正确的 一个:
在标准的制定,
(e op ...)
的形式(e_i op <stuff>)
的子表达式。它没有 表单(<stuff> op e_i)
的子表达式。这与所有其他包 扩展一致,其中扩展包括 模式的重复实例。
(e op ... op eN)
,其中eN
是非包,必须具有eN
作为最操作数以有用 - 即,它必须是(e1 op (e2 op (e3 op (... op eN)...)))
,不(...(((e1 op e2) op e3) op ...) op eN)
- 反之亦然为(e0 op ... op e)
。这允许 例如(string() + ... + things)
和(std::cout << ... << things)
工作。为了保持一致性,(e op ...)
也必须是(e1 op (e2 op (...)))
。
6
我不能为提案发言,但新的交换定义对我来说似乎很自然。我的理由是,(... + args)
是左折叠的子表达式,而(args + ...)
是右折叠的子表达式。事实上,前者是最后一部分,后者是表达式的最初部分(我可能没有使用正确的术语)。
这里是我会说明的褶皱从语法的扩展:
左折叠
(... + args)
(... + args) + a999)
(... + args) + a998) + a999)
((...((a0 + a1) + a2)...) + a999)
右折
(args + ...)
(a0 + (args + ...)
(a0 + (a1 + (args + ...)
(a0 + (...(a997 + (a998 + a999))...))
相关问题
- 1. 折叠表达式的评估顺序
- 2. Vim中正则表达式的折叠
- 3. 使折叠式折叠式可折叠手风琴排序
- 4. 以折叠方式折叠动态添加的制表符
- 5. 带内联样式的可折叠列表 - 可能吗?
- 6. 为什么不能在常量表达式中显示折叠表达式?
- 7. 折叠关系Neo4j?
- 8. PHP:使用正则表达式的关联数组的属性
- 9. s表达式的折叠部分组成 - 建议请求
- 10. 当使用D时,Vim中的fold表达式会折叠unittests?
- 11. 折叠表达式的值类别是否始终为预值?
- 12. 如何在vim中折叠所有的正则表达式?
- 13. 折叠式开关不起作用
- 14. 折叠线<N字符正则表达式与
- 15. 可能崩溃/折叠复合表达式
- 16. 可折叠的div格式
- 17. 导航折叠和关闭
- 18. 折叠MS Access表
- 19. 可折叠列表
- 20. 可折叠列表
- 21. 折叠表格行
- 22. 折叠/展开表
- 23. 与html折叠表
- 24. 跨浏览器响应式折叠表
- 25. 可折叠属性ExtJS
- 26. 我第一次关闭折叠,它会关闭所有的折叠
- 27. Aptana折叠/折叠方法?
- 28. PyCharm代码折叠折叠
- 29. 部门行为不正常。关于折叠和折叠
- 30. 可折叠行的GWT表
我只想问理查德·安德鲁或:) – SergeyA
我不知道他们的理由,但对我来说'(... +参数)'看起来像左折'(的子表达式((... + a8)+ a9)+ a10)'。同样,'(args + ...)'看起来就像是'fold a'的子表达式(a0 +(a1 +(a2 ...)))''。 – user2079303
@ user2079303'a + b + c'的左关联性通常定义为(a + b)+ c,您使用的是相反的 – TemplateRex