A const volatile object is an object of type
constvolatile T, a non-mutable subobject of a const volatile object,
a const subobject of a volatile object, or a non-mutable volatile
subobject of a const object.
The cv-qualified or
cv-unqualified versions of a type
are distinct types; however, they shall have the same representation and
alignment requirements ([basic.align]).47
Cv-qualifiers applied to an array
type attach to the underlying element type, so the notation
“cvT”, where T is an array type, refers to
an array whose elements are so-qualified ([dcl.array]).
— end note]
[Example 1: typedefchar CA[5];
typedefconstchar CC;
CC arr1[5]={0};
const CA arr2 ={0};
The type of both arr1 and arr2 is “array of 5
constchar”, and the array type is considered to be
const-qualified.
In this document, the notation cv (or
cv1, cv2, etc.)
, used in the description of types,
represents an arbitrary set of cv-qualifiers, i.e., one of
{const}, {volatile}, {const,
volatile}, or the empty set.
The same representation
and alignment requirements are meant to imply
interchangeability as arguments to functions, return values from
functions, and non-static data members of unions.