Assignment in ternary condition operator
Steven Schveighoffer
schveiguy at gmail.com
Tue Aug 7 19:58:40 UTC 2018
On 8/7/18 3:18 PM, JN wrote:
> int a, b;
>
> if (a = 3) { } <- not allowed: Error: assignment cannot be used as a
> condition, perhaps == was meant?
>
> b = a = 3 ? 4 : 5 <- allowed
>
>
> I believe the second case should be disallowed also. It seems illogical,
> that the first one isn't allowed, but the second one is, when the second
> one is also 'assignment used as condition'. Is there a valid usecase for
> such assignment?
But operator precedence says that this is really:
b = (a = (3 ? 4 : 5))
It's a different thing than the if statement. In the if statement, it's
the *assignment* that is now the condition. Here, it is not an
assignment that is the condition, but `3`. There is no common error that
requires preventing assignment from the result of an assignment.
I realize that what you seeing is a typo from:
b = a == 3 ? 4 : 5
but the problem is that you are relying on precedence incorrectly here.
If you type:
b = (a = 3) ? 4 : 5
Then you get the error. D can't solve all the problems. Best thing to do
is to use parentheses to clarify what you want for your condition rather
than rely on default order of operations.
-Steve
More information about the Digitalmars-d-learn
mailing list