Re: Operator associativity
От: Centaur Россия  
Дата: 24.06.11 08:01
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>несколько вопросов


J>DWORD RVA = ..., VirtualAddress = ..., PointerToRawData = ...;


J>1)

J>RVA — VirtualAddress + PointerToRawData;
J>гарантируется ли что 1) вычитание 2) сложение ?
J>гарантию дает ассоциативность ?

В стандарте нет слов «приоритет операций» и «ассоциативность». Это мнемонические правила, которые придумали люди, чтобы не запоминать грамматику выражений.

В стандарте нет требований, что компилятор Обязан Гарантировать определённый порядок вычислений. Он только обязан гарантировать результат, совпадающий с тем, который бы получился на Абстрактной Машине. Если компилятор знает, что для целых чисел операция сложения ассоциативна, и это знание помогает выбрать более оптимальный порядок — он имеет право этим воспользоваться. Если компилятор достаточно мощный, чтобы определить, что операция сложения ассоциативна также и для определённого пользователем класса Матриц над Комплексными числами с вещественными коэффициентами — он может воспользоваться и этим. (Правда, тут в понятие ассоциативности будет входить не только совпадение результатов вычисления (A+B)+C == A+(B+C), но и отсутствие (или совпадение) Побочных Эффектов операции + (к каковым относятся вызовы функций ввода-вывода и функций операционной системы и доступы к volatile переменным)).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.