|
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. |