Являются ли выражения сгиба короткими замыканиями?

В C ++ 17, являются ли сложенные выражения короткое замыкание при использовании с && или же || как их оператор? Если да, то где это указано?

2

Решение

Да, сложить выражения с помощью && или же || поскольку оператор может закорачивать, при условии обычного предостережения, что это происходит для встроенного значения, но не для перегруженной операторской функции.

Значение выражения сгиба определено в [temp.variadic] / 9:

Создание экземпляра складчато-выражение производит:

  • ((E_1 оп E_2) оп) оп E_N для одинарной левой складки,

  • E_1 оп (оп (E_N_minus_1 оп E_N)) для одинарной правой складки,

  • (((E оп E_1) оп E_2) оп) оп E_N для двоичной левой складки, и

  • E_1 оп (оп (E_N_minus_1 оп (E_N оп E))) для двоичного правильного сгиба.

В каждом случае, оп это складчато-оператор,….

Поскольку создание выражения для сгиба происходит в терминах выражения, содержащего оператор, применяются все обычные правила для оператора, включая разрешение перегрузки, порядок вычисления и короткое замыкание при использовании встроенного оператора.

5

Другие решения

В то время как @ aschepler’s ответ это особенно правильный, я хотел бы повторить жизненный урок, который я поделился относительно другого тонкого технического момента (порядок уничтожения кортежей):

Если вы можете сформулировать для нескольких альтернатив разумный аргумент о том, почему эта альтернатива должна быть той, которая предусмотрена стандартом, — тогда вы не должны предполагать, что какой-либо из них является обязательным (даже если один из них оказывается).

В контексте выражений сгиба и логики короткого замыкания — уже достаточно сложно читать кодированные переменные коды, поэтому я попытался бы избавить читателя моего кода от головокружения относительно того, происходит ли короткое замыкание сгиба …

Если вы не можете избежать написания and а также or складки, по крайней мере, быть щедрым с комментариями относительно поведения короткого замыкания.

0

По вопросам рекламы [email protected]