Yes, it sure respects the contract.
6.7.3 Type qualifiers
8 An object that is accessed through a restrict
-qualified pointer has a special association
with that pointer. This association, defined in 6.7.3.1 below, requires that all accesses to
that object use, directly or indirectly, the value of that particular pointer.135) The intended
use of the restrict qualifier (like the register storage class) is to promote
optimization, and deleting all instances of the qualifier from all preprocessing translation
units composing a conforming program does not change its meaning (i.e., observable
behavior).
In short, at the point foo
is defined (the function-call), foo
is guaranteed by the programmer to be the only way to refer to the objects (if any) it points to.
All other expressions referring to those object must thus be derived from that pointers value (like bar
which is set to foo+32
).
Breaking faith is, as always in such cases, duly punished by undefined behavior.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…