# Changes in /[5f95b5f:69ce455]

Ignore:
File:
1 edited

### Legend:

Unmodified
 r5f95b5f The result of this rule is that any reference can be rebound using the existing pointer assignment semantics by assigning a compatible pointer into the address of the reference, \eg @&r1 = &x;@ above. This rebinding can occur to an arbitrary depth of reference nesting; $n$ address-of operators applied to a reference nested $m$ times will produce an lvalue pointer nested $n$ times if $n \le m$ (note that $n = m+1$ is simply the usual C rvalue address-of operator applied to the $n = m$ case). The explicit address-of operators can be thought of as cancelling out'' the implicit dereference operators, \eg @(&*)r1 = &x;@ or @(&(&*)*)r3 = &(&*)r1;@ or even @(&*)r2 = (&*)*r3;@ for @&r2 = &r3;@. The explicit address-of operators can be thought of as cancelling out'' the implicit dereference operators, \eg @(&*)r1 = &x@ or @(&(&*)*)r3 = &(&*)r1@ or even @(&*)r2 = (&*)*r3@ for @&r2 = &r3@. Since pointers and references share the same internal representation, code using either is equally performant; in fact the \CFA compiler converts references to pointers internally, and the choice between them in user code can be made based solely on convenience. \end{cfa} \TODO{Pull more draft text from user manual; make sure to discuss initialization and reference conversions} Given that a reference is meant to represent a lvalue, \CFA provides some syntactic shortcuts when initializing references. There are three initialization contexts in \CFA: declaration initialization, argument/parameter binding, and return/temporary binding. In each of these contexts, the address-of operator on the target lvalue may (in fact, must) be elided. The syntactic motivation for this is clearest when considering overloaded operator-assignment, \eg @int ?+=?(int &, int)@; given @int x, y@, the expected call syntax is @x += y@, not @&x += y@. This initialization of references from lvalues rather than pointers can be considered a lvalue-to-reference'' conversion rather than an elision of the address-of operator; similarly, use of a the value pointed to by a reference in an rvalue context can be thought of as a reference-to-rvalue'' conversion. \CFA includes one more reference conversion, an rvalue-to-reference'' conversion. \TODO{finish reference conversions; look at user manual}