const vector implies const elements?
Solution 1:
Yes, a const vector
provides access to its elements as if they were const
, that is, it only gives you const
references. In your second function, it's not the objects of type A
that are const
, but pointers to them. A pointer being const
does not mean that the object the pointer is pointing to is const
. To declare a pointer-to-const, use the type A const *
.
Solution 2:
The first version
v[0].set (1234);
does not compile because it tries to change the vector's first element returned to it by reference. The compiler thinks it's a change because set(int)
is not marked const
.
The second version, on the other hand, only reads from the vector
(*v[0]).set(1234);
and calls set
on the result of the dereference of a constant reference to a pointer that it gets back.
When you call v[0]
on a const
vector, you get back a const
reference to A
. When element type is a pointer, calling set
on it is OK. You could change the second example to
v[0]->set(1234);
and get the same result as before. This is because you get a reference to a pointer that is constant, but the item pointed to by that pointer is not constant.