繁体   English   中英

折叠表达式是否会短路?

[英]Are fold expressions subject to short-circuiting?

在C ++ 17中,当与&&||使用时,折叠表达式会受到短路影响 作为他们的经营者 如果是这样,这在哪里指定?

是的,使用&&||折叠表达式 因为操作员可以短路,但通常需要注意的是内置意义,而不是重载的操作员功能。

fold-expression的含义在[temp.variadic] / 9中定义:

fold-expression的实例化产生:

  • ((E_1 op E_2) op ... ) op E_N for a left left fold,

  • E_1 op ( ... op (E_N_minus_1 op E_N))用于一元右折,

  • (((E op E_1) op E_2) op ... ) op E_N表示二进制左折叠,和

  • E_1 op ( ... op (E_N_minus_1 op (E_N op E)))用于二进制右折叠。

在每种情况下, op都是折叠运算符 ,....

由于fold-expression的实例化是根据包含运算符的表达式进行的,因此适用于运算符的所有常规规则,包括重载决策,评估顺序和内置运算符时的短路。

虽然@ aschepler的答案是特别正确的答案 ,但我想重复我关于另一个精细技术要点(破坏的元组顺序)的生活教训:

如果您可以为多种替代方案制定一个合理的论据,说明为什么该替代方案应该是标准规定的方案 - 那么您不应该假设它们中的任何一个是强制性的(即使其中一个恰好是)。

在折叠表达式和短路逻辑的上下文中 - 读取可变模板化代码已经很困难了,所以我试着保存我的代码的读者,关于是否发生折叠短路问题......

如果你不能避免写作and / or折叠,至少要慷慨评论短路行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM