const
As we have observed many times, the type of an object defines the operations that can be performed by that object. A const
type can use most but not all of the same operations as its nonconst
version. The one restriction is that we may use only those operations that cannot change an object. So, for example, we can use a const int
in arithmetic expressions in exactly the same way as a plain, nonconst int
. A const int
converts to bool
the same way as a plain int
, and so on.
Among the operations that don’t change the value of an object is initialization—when we use an object to initialize another object, it doesn’t matter whether either or both of the objects are const
s:
int i = 42;
const int ci = i; // ok: the value in i is copied into ci
int j = ci; // ok: the value in ci is copied into j
Although ci
is a const int
, the value in ci
is an int
. The const
ness of ci
matters only for operations that might change ci
. When we copy ci
to initialize j
, we don’t care that ci
is a const
. Copying an object doesn’t change that object. Once the copy is made, the new object has no further access to the original object.