Здравствуйте, jyuyjiyuijyu, Вы писали:
J>несколько вопросов
J>DWORD RVA = ..., VirtualAddress = ..., PointerToRawData = ...;
J>1) J>RVA — VirtualAddress + PointerToRawData; J>гарантируется ли что 1) вычитание 2) сложение ? J>гарантию дает ассоциативность ?
В стандарте нет слов «приоритет операций» и «ассоциативность». Это мнемонические правила, которые придумали люди, чтобы не запоминать грамматику выражений.
В стандарте нет требований, что компилятор Обязан Гарантировать определённый порядок вычислений. Он только обязан гарантировать результат, совпадающий с тем, который бы получился на Абстрактной Машине. Если компилятор знает, что для целых чисел операция сложения ассоциативна, и это знание помогает выбрать более оптимальный порядок — он имеет право этим воспользоваться. Если компилятор достаточно мощный, чтобы определить, что операция сложения ассоциативна также и для определённого пользователем класса Матриц над Комплексными числами с вещественными коэффициентами — он может воспользоваться и этим. (Правда, тут в понятие ассоциативности будет входить не только совпадение результатов вычисления (A+B)+C == A+(B+C), но и отсутствие (или совпадение) Побочных Эффектов операции + (к каковым относятся вызовы функций ввода-вывода и функций операционной системы и доступы к volatile переменным)).