On 10/11/18 9:16 PM, Jonathan Marler wrote:
On Thursday, 11 October 2018 at 23:29:05 UTC, Steven Schveighoffer wrote:
On 10/11/18 7:17 PM, Jonathan Marler wrote:
I had a look at the table again, looks like the ternary operator is
on there, just called the "conditional operator". And to clarify, D's
operator precedence is close to C/C++ but doesn't match exactly.
This is likely a result of the grammar differences rather than an
intention one. For example, the "Conditional operator" in D actually
has a higher priority than an assignment, but in C++ it's the same
and is evaluated right-to-left. So this expression would be
different in C++ and D:
Not in my C/D code. It would have copious parentheses everywhere :)
Good :)
Yep. General rule of thumb for me after having been burned many many
times -- Always use parentheses to define order of operations when
dealing with bitwise operations (and, or, xor) and for the ternary operator.
I think I do make an exception when it's a simple assignment. i.e.:
a = cond ? 1 : 2;
That case is actually very strange, I don't know if it's something
that's really common.
Yes, that explains why myself, Jonathan Davis and certainly others
didn't know there were actually differences between C++ and D Operator
precedence :) I wasn't sure myself but having a quick look at each's
operator precedence table made it easy to find an expression that
behaves differently in both.
I actually was curious whether DMC followed the rules (hey, maybe Walter
just copied his existing code!), but it does follow C's rules.
-Steve