簡體   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