[英]Are fold expressions subject to short-circuiting?
是的,使用&&
或||
折叠表达式 因为操作员可以短路,但通常需要注意的是内置意义,而不是重载的操作员功能。
fold-expression的含义在[temp.variadic] / 9中定义:
fold-expression的实例化产生:
((E_1
opE_2)
op ...)
opE_N
for a left left fold,
E_1
op(
... op(E_N_minus_1
opE_N))
用于一元右折,
(((E
opE_1)
opE_2)
op ...)
opE_N
表示二进制左折叠,和
E_1
op(
... op(E_N_minus_1
op(E_N
opE)))
用于二进制右折叠。在每种情况下, op都是折叠运算符 ,....
由于fold-expression的实例化是根据包含运算符的表达式进行的,因此适用于运算符的所有常规规则,包括重载决策,评估顺序和内置运算符时的短路。
虽然@ aschepler的答案是特别正确的答案 ,但我想重复我关于另一个精细技术要点(破坏的元组顺序)的生活教训:
如果您可以为多种替代方案制定一个合理的论据,说明为什么该替代方案应该是标准规定的方案 - 那么您不应该假设它们中的任何一个是强制性的(即使其中一个恰好是)。
在折叠表达式和短路逻辑的上下文中 - 读取可变模板化代码已经很困难了,所以我试着保存我的代码的读者,关于是否发生折叠短路问题......
如果你不能避免写作and
/ or
折叠,至少要慷慨评论短路行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.