Re: Moderate (beginner) elaborate template (imbricated Vector &
Matrix) with VS2003 & G++ 3.4.4
On 8 mar, 22:15, "Gilles DRIDI" <gdr...@club-internet.fr> wrote:
Thank you a lot Paolo.
The compiler don't say clearly it is a const suject ..
All you want to know is that a temporary object is const.
No it's not. As Paavo said, the language doesn't permit the
initialisation of a non-const reference with a temporary.
Temporaries themselves are not const, unless they've been
explicitly declared to be const.
Thus, the temporary object from the + operator must be
manipulated by const parameter (first paramenter) for
1. the copy constructor : X(const X &)
2. the = operator
The basic rule is to conform to what the compiler does by
default. That means const references as parameters for both the
copy constructor and the copy assignment operator. Without
that, you cannot copy temporaries or const variables.
This is, of course, a standard idiom, which should be explained
in any introductory book to C++. (The exact rules concerning
how overload resolution, temporaries and const interact are
relatively complicated. Just use const anytime you don't modify
the object, however, and the results will work in a fairly
simple and intuitive manner, and you can more or less ignore the
exact rules.)
Moreover, the access operator [] must be declared as a const
function (I do not know how to declare such a function)
operator [] (long i) const { return tab[i]; }
Usually, there are two versions of the operator[], one const,
and the other not.
This is for your guidance for programmer beginner with template.
Gilles DRIDIhttp://cdridi.club.fr
I didn't find any explinations of templates there. (You might
also warn that it is in French---posters here aren't necessarily
fluent in the language. Also, I think you'll find that most
professional programmers disagree with your "adage" at the end.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34