digitalmars.D.learn - [D1][expressions] Order Of Evaluation
- %u (7/7) Oct 08 2010 /The following binary expressions are evaluated in an implementation-def...
- bearophile (5/10) Oct 08 2010 I presume this doesn't need other brackets.
- Denis Koroskin (8/17) Oct 08 2010 Assignment has higher precedence that addition so your code has no error...
- %u (7/28) Oct 08 2010 You probably mean that the other way around ;)
/The following binary expressions are evaluated in an implementation-defined order: AssignExpression/../AddExpression/ /It is an error to depend on order of evaluation when it is not specified./ That makes this an error!? y = x + 1; Am I being paranoid or should I be adding more brackets?
Oct 08 2010
%u:That makes this an error!? y = x + 1; Am I being paranoid or should I be adding more brackets?I presume this doesn't need other brackets. And Walter has two or three times stated that he wants to eventually define the Bye, bearophile
Oct 08 2010
On Fri, 08 Oct 2010 18:49:36 +0400, %u <e ee.com> wrote:/The following binary expressions are evaluated in an implementation-defined order: AssignExpression/../AddExpression/ /It is an error to depend on order of evaluation when it is not specified./ That makes this an error!? y = x + 1; Am I being paranoid or should I be adding more brackets?Assignment has higher precedence that addition so your code has no errors. However, the following one does: int x = 1; int y = (x = 2) + x; because "x" and "x = 2" has same precedence and thus may be evaluated in any order. Stay away from such code and you should be fine.
Oct 08 2010
== Quote from Denis Koroskin (2korden gmail.com)'s articleOn Fri, 08 Oct 2010 18:49:36 +0400, %u <e ee.com> wrote:You probably mean that the other way around ;) But you are right, I am confusing precedence and associativity. The expressions page reads like there are only two levels of precedence, but it only says anyting about the associativity. A quick search on precedence shows that the C precedence rules apply./The following binary expressions are evaluated in an implementation-defined order: AssignExpression/../AddExpression/ /It is an error to depend on order of evaluation when it is not specified./ That makes this an error!? y = x + 1; Am I being paranoid or should I be adding more brackets?Assignment has higher precedence that addition so your code has no errors.However, the following one does: int x = 1; int y = (x = 2) + x; because "x" and "x = 2" has same precedence and thus may be evaluated in any order. Stay away from such code and you should be fine.I never assign within assignments :)
Oct 08 2010