Правоассоциативность оператора ??
От: igna Россия  
Дата: 07.03.07 06:21
Оценка:
Оператор ?? правоассоциативен и a ?? b ?? c означает то же, что a ?? (b ?? c), что особо указано в стандарте.

А будь он левоассоциативен, что изменилось бы кроме порядка вычисления подвыражений?
Re: Правоассоциативность оператора ??
От: Poul_Ko Казахстан  
Дата: 07.03.07 07:19
Оценка: 6 (1)
Здравствуйте, 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 есть результат всего выражения.

А теперь сделайте для пяти, шести и т.д. операндов и почувствуйте разницу.
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.