|
Alias Optimization (const qualified)
Const-qualified objects can not be modified, and therefore can not be an alias for an lvalue that is used to explicitly modify an object through assignment. Example:In the code fragment below, the address of the object pointed to by p is not known, but q points to a const array, and its members can not be modified. Since p is used to modify an object through assignment, p can not be an alias for q. const int const_array[]; void f (int *p, int i) { int x, y; const int *q = &const_array[i]; x = *q; *p = 5; y = *q; g (x, y); } Since p is not an alias for q, the second reference to the object pointed to by q can be eliminated, as shown below. const int const_array[]; void f (int *p, int i) { int x, y; const int *q = &const_array[i]; x = *q; *p = 5; g (x, x); } Notes:The optimization above is allowed because it is known that q points to a const object. Note that it is not sufficient that q have type pointer to const. In other words, the ANSI C standard permits a pointer of type pointer to const to point to a non-const object, in which case this optimization could not be performed without more information. Although supported by a few compilers, this optimization is not very common. © 1990-2012 Nullstone Corporation. All Rights Reserved. |