[英]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.