1)
RVA — VirtualAddress + PointerToRawData;
гарантируется ли что 1) вычитание 2) сложение ?
гарантию дает ассоциативность ?
2)
небольшой штрих
RVA + VirtualAddress + PointerToRawData;
тут как я понимаю компилятор уже не обязан соблюдать порядок
операций из за коммутативности выражения ?
3)
~RVA — ~VirtualAddress + ~PointerToRawData;
тоже самое понятно что выражения с инверсией это
первичные выражения ну а потом гарантируется ли что
1) вычитание 2) сложение ?
гарантию дает ассоциативность ?
или из за того что выражение не коммутативное приходится
соблюдать порядок и вспоминать про ассоциативность ?
4)
(RVA|0xf) — (VirtualAddress|0xf) + (PointerToRawData|0xf);
искуственно создали первичные выражения следом
гаранируется ли что 1) вычитание 2) сложение ?
гарантию дает ассоциативность ?
5)
получается что асооциативность гарантирует порядок
только для не коммутативных выражений ?
Страуструп писал что перегрузка не влияет на ассоциативность и приоритет
например вместо << для std::cout мы бы перегрузили +
cout + expr + expr + expr;
почему тут компилятор гарантирует порядок
а для обычных выражений (коммутативных) с операциями сложения нет ?
тут я думаю хоть + и коммутативен для базовых типов но в случае
с перегрузкой компилятор не знает его смысла и обязан следовать правилам
так ?
6)
sometype *imp = ...;
imp++->field = ...
тут все нормально инкремент после считывания поля ?