Когда экземпляр foo является const, его элементы данных также являются константными, но это относится к указателям иначе, чем вы могли бы сначала подумать:
struct A {
int *p;
};
A const obj;
Тип obj.p - int * const,не int const *;то есть постоянный указатель на int, а не указатель на константу int.
Чтобы взглянуть на него по-другому, давайте начнем с функции:
template<class T>
T const& const_(T const &x) {
return x;
}
Теперь представьте, что у нас естьПример, и мы делаем его постоянным.Вы можете представить, что при применении const_ к каждому элементу данных.
A nc;
// nc.p has type int*.
typedef int *T; // T is the type of nc.p.
T const &p_when_nc_is_const = const_(nc.p);
// "T const" is "int * const".
const T &be_wary_of_where_you_place_const = const_(nc.p);
// "const T" is "int * const".
// "const T" is *not* "const int *".
Переменная be_wary_of_where_you_place_const показывает, что «добавление const» равно , а не так же, как добавление «const» к буквальному текстутип.