
4) Referencial integrity is anyway tricky enough to break even into a library specially designed to protect it. For example, FC++ uses reference to const objects in order to avoid mutable arguments, all in the name of referencial integrity. However, a "const&" parameter is not totally inmune to such problems the way a _true_ by-value parameter is, because it is after all still a reference, and references alias. Consider the following aparently contrived example:
inline point transform ( point const& p ) { return point(2.0* p.x * p.y, 0.5 * p.x * p.y); } void foo() { point p (..whatever...); p = transform(p); }
On many C++ implementations, the code above will yield an incorrect result because the return object will actually be constructed in place, producing an actual code equivalent to:
p.x = 2.0 * p.x * p.y ; p.y = 0.5 * p.x * p.y ;
and you can see how the aliasing resulted in the _argument_ "p.x" being modified inside the function.
That example is not too uncommon because any non-linear transformation
"Fernando Cacciola" <fernando_cacciola@hotmail.com> wrote in message news:c10gfp$qi0$1@sea.gmane.org... [snip] that
use a linear combination of the coordinates can fail because of the aliasing if a const& parameter is used instead of a true by-value argument.
Please educate me, is that really legal for a C++ implementation to do what you're saying? br Thorsten