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

Reply via email to