const vector<A> vs vector<const A> vs const vector<const A>

const vector<A> vs vector<const A> vs const vector<const A>

Post by Neelesh Bo » Thu, 06 Sep 2007 03:08:29



missing return value
missing return value;


v is a const vector whose elements are of type A. Effectively,
v.push_back() (or any other operation that changes the vector) is not
allowed on v
doesnot compile
Talking about the 2nd case (const std::vector<A> v), since v is a
const vector, non-const member functions cannot be called, const
member functions can be.

-N
 
 
 

const vector<A> vs vector<const A> vs const vector<const A>

Post by James Kanz » Thu, 06 Sep 2007 05:46:25


Yes. The first and third aren't legal. An element of a
container must support assignment, and A const doesn't.

In general, in the standard library, declaring a container to be
const (i.e. your second declaration) means that 1) the topology
(number and order of elements) cannot change, and 2) the value
of the individual elements cannot change.




Illegal. As I said above, the declaration of v is illegal in
the first and third cases above. And if v is declared as in the
second case, push_back cannot be used on it. Given something
like:

std::vector< A > const v( 1, A() ) ;

however, v[0].m1() is legal, v[0].m2() no.

James Kanze (GABI Software) email: XXXX@XXXXX.COM
Conseils en informatique orient objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sard, 78210 St.-Cyr-l'ole, France, +33 (0)1 30 23 00 34