Здравствуйте, igna, Вы писали:
I>Оператор ?? правоассоциативен и a ?? b ?? c означает то же, что a ?? (b ?? c), что особо указано в стандарте.
I>А будь он левоассоциативен, что изменилось бы кроме порядка вычисления подвыражений?
Спецификация:
A null coalescing expression of the form a ?? b requires a to be of a nullable type or reference type. If a is non-null, the result of a ?? b is a; otherwise, the result is b. The operation evaluates b only if a is null.
Например:
a ?? b ?? c ?? d, a=null, b!=null.
1. Правоассоциативность: a ?? (b ?? (c ?? d)). Порядок вычисления:
1.1 рассматриваем a: а = null, идём дальше
1.2 рассматриваем b: b !=null, b — есть результат, (c ?? d) не рассматривается по спецификации
2. Левоассоциативность: ((a ?? b) ?? c) ?? d. Порядок вычисления:
2.1 рассматриваем скобку (a ?? b): a = null, R1 = b — результат скобки (a ?? b)
2.2 рассматриваем скобку (R1 ?? c): R1 != null, R2 = R1 — результат скобки (R1 ?? c)
2.3 рассматриваем R2 ?? d: R2 != null — R2 есть результат всего выражения.
А теперь сделайте для пяти, шести и т.д. операндов и почувствуйте разницу.