[LC++]can't seem to use reference
Carlo Wood
carlo at alinoe.com
Tue Feb 19 16:45:35 UTC 2002
On Tue, Feb 19, 2002 at 11:32:05AM +1030, Mark Phillips wrote:
> > largeStructTy const& ls(largeStructList[i]);
> > largeStructTy const& nextLs(largeStructList[i]);
> > nextLs = largeStructList[i + 1];
> any case, both out pieces of code fail because C++ doesn't allow
> the reassignment of a reference.
Excuse me, but I am not reassigning a reference, the line
"nextLs = largeStructList[i + 1]" is doing the copying
that I thought were doing. Thats what you get when you
write illegal code (nonsense thus).
> I am considering largeStructList to be a read-only array of
> large structures. At each stage in the for loop I want to
> process things involving consecutive pairs. I could, as you
> say, explicitly instantiate references to the two consecutive
> objects at each iteration. But a better way would be to use
> the second reference at iteration i, as the first reference
> at iteration i+1, meaning there is no need to recalculate
> it. Unfortunately C++ syntax does not allow this.
Well, now I know what you want...
largeStructTy const* lsp = &largeStructList[0]; // Single, one time assembly instruction.
for (largeStructTy const* next_lsp = &largeStructList[1]; // Single, one time assembly instruction.
next_lsp < &largeStructList[N]; // &largeStructList[N] is a constant, compared with a register.
++next_lsp) // Single assembly instruction.
{
largeStructTy const& ls(*lsp); // Generates no code, internally lsp and lp are the same register.
largeStructTy const& nextLs(*next_lsp); // Idem, generates no code.
// do stuff involving the reading of ls and nextLs
// ...
}
So, that is two assembly instructions inside the loop,
an increment of register and a compare of register
with constant (address).
--
Carlo Wood <carlo at alinoe.com>
More information about the tuxCPProgramming
mailing list