
From: Marcus Lindblom <macke@yar.nu>
Martin Bonner wrote:
A more serious problem is if you start mixing usages. A compiler is quite likely to assume that assignments through the result of the index operator don't affect .y or .z, and optimize on that basis.
Why should it? The offset to memory will be the same, so it should treat it as access to the same memory location, if it optimizes well in the backend ('assembly' AST).
vector3d v; v.y = 4.0; v[1] = 5.0; // only touches v.x!! cout << v.y; Since v.x is assigned to but never used, the compiler might optimize away the assignment. In practice, compilers typically don't do this optimization when pointers are present, precisely because hackers^W programmers do stuff like this. I certainly wouldn't want to *assume* this for my compiler, though. - James Jones Administrative Data Mgmt. Webmaster 375 Raritan Center Pkwy, Suite A Data Architect Edison, NJ 08837