Operator associativity
От: jyuyjiyuijyu  
Дата: 24.06.11 06:51
Оценка:
Всем привет
несколько вопросов

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

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 = ...
тут все нормально инкремент после считывания поля ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.