1 / 1 / 1
Регистрация: 13.02.2016
Сообщений: 39
1

Спецификатор верхнего уровня const

13.02.2016, 16:29. Показов 1883. Ответов 9
Метки нет (Все метки)

Поясните, пожалуйста, этот пример:

C++
1
2
3
const int ci=42;
const int *p2=&ci;
const int *const p3=p2; //справа const верхнего уровня, слева нет.
Почему слева нет const верхнего уровня?
Справа понятно, потому что указатель p2 указывает на переменную ci , которая является константой типа int. А в общем смысле const верхнего уровня означает, что объект сам константа. Еще const верхнего уровня означает, что указатель константа. Слева указатель не является сам константой? *сonst p3? Знак обращение к значению перед const.

Что я не понимаю?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2016, 16:29
Ответы с готовыми решениями:

Const верхнего и нижнего уровня, где?!
Читаю книгу, и все не как не могу точно понять, где const верхнего, а где нижнего уровня. const...

Спецификатор const у конструктора
Добрый вечер, почему конструктор и деструктор не могут иметь спецификатор const? - если бы...

Возможно ли убрать cv-спецификатор (const) у переменной?
Доброго времени суток! Прошу помощи кое что понять(у Шилдта и Либерти этого не нашёл.....или...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

9
Don't worry, be happy
17779 / 10543 / 2035
Регистрация: 27.09.2012
Сообщений: 26,514
Записей в блоге: 1
13.02.2016, 16:34 2
Const - обещание (гарантия) или требование?
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
13.02.2016, 17:55 3
Billy_Milligan, скорее всего, там опечатка(и), потому что дальше пишется:
У указателя p3 есть спецификатор const нижнего и верхнего уровня.
И p2 - это const нижнего уровня (указатель на константу), а не верхнего.

Добавлено через 4 минуты
А написано там так:
const int *p2=&ci; // нельзя изменить p2; const нижнего уровня
Что нижнего уровня - правильно, что нельзя изменить p2 - неправильно.
1
1 / 1 / 1
Регистрация: 13.02.2016
Сообщений: 39
16.02.2016, 19:56  [ТС] 4
Croessmah, спасибо, за ссылку, но сложно, термины непонятные

Добавлено через 10 минут
nd2, да, опечатка, точно! Я не заметил, не думал что в примерах могут быть, но было сомнение на этот счет, этот пример попал под него
C++
1
const int *p2=&ci; // нельзя изменить p2; const нижнего уровня
В этом примере вроде бы мне все понятно. Адрес указателя можно изменить. Но изменить объект на который он указывает нельзя. Потому что тип const.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.02.2016, 20:28 5
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
Адрес указателя можно изменить. Но изменить объект на который он указывает нельзя. Потому что тип const.
Только не адрес указателя (&p2), а адрес в указателе.
0
1 / 1 / 1
Регистрация: 18.08.2014
Сообщений: 12
17.02.2016, 07:47 6
Здесь не опечатка. Далее к.д(константные данные)
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int ci=42; //константная переменная
const int *p2=&ci; //указатель на к.д., т.е. разъименовав указатель я не смогу изменить значение ci
const int *const p3=p2; //а это константный указатель на к.д.
//примеры
int nv = 23;
int * p4 = &nv;
p3 = p4; //ошибка p3 - константный указатель
*p4 = 54; //nv = 54
*p3 = 45; // Ошибка p3 указатель на к.д.
p4 = p3; // Ошибка p4 - указатель на не к.д. а p3 указатель на к.д 
p4 = const_cast<int*>(p3); // p4 -> ci
*p4 = 20; //ci равно 20
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.02.2016, 08:00 7
Цитата Сообщение от MoOr Посмотреть сообщение
Здесь не опечатка.
Где не опечатка? Здесь?
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
const int *const p3=p2; // справа const верхнего уровня, слева нет.
Добавлено через 2 минуты
Слева нет const верхнего уровня? p3 - не константный указатель?
Цитата Сообщение от nd2 Посмотреть сообщение
дальше пишется:
У указателя p3 есть спецификатор const нижнего и верхнего уровня.
Добавлено через 3 минуты
Здесь не опечатка?
Цитата Сообщение от nd2 Посмотреть сообщение
А написано там так:
const int *p2 = &ci; // нельзя изменить p2; const нижнего уровня
p2 нельзя изменить? p2 - константный указатель?
0
1 / 1 / 1
Регистрация: 18.08.2014
Сообщений: 12
17.02.2016, 09:08 8
Не понял я видать про какую опечатку идет речь, если в книжке в комментариях так написано то да это не правильное разъяснение. А так в с++ коде ошибок нет
0
1 / 1 / 1
Регистрация: 13.02.2016
Сообщений: 39
17.02.2016, 14:33  [ТС] 9
Здравствуйте, проверьте, пожалуйста, усек я или нет
Какие из следующих объявлений имеют спецефикаторы верхнего и нижнего уровня?
C++
1
2
3
4
const int v2=0; //cпецификатор верхнего уровня.
int *p1=&v1, &r1=v1;
int v1=v2;
const int *p2=&v2, *const p3=&i, &r2=v2;//p2-cпецификатор сonst нижнего уровня; p3-cпецификатор const верхнего уровня.
Допустимы ли следующие присвоения, с учетом предыдущего упражнения?

C++
1
2
3
4
5
r1=v2;// ok, спецификатор верхнего уровня переменной v2 опускается.
p1=p2;//f, p1 должен иметь спецификатор низкого уровня, p2 - имеет.
p1=p3;// ok, p3 имеет специфкатор высокого уровня, он опускается.
p2=p1;//f, указатель p2 нижнего уровня, объект константа, нельзя изменить его.
p2=p3;//f, тоже что и выше.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.02.2016, 22:00 10
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
p3-cпецификатор const верхнего уровня.
И верхнего и нижнего:
Цитата Сообщение от nd2 Посмотреть сообщение
дальше пишется:
У указателя p3 есть спецификатор const нижнего и верхнего уровня.
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
p1=p3;// ok, p3 имеет специфкатор высокого уровня, он опускается.
f, p3 имеет const нижнего уровня, p1 - нет.
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
p2=p1;//f, указатель p2 нижнего уровня, объект константа, нельзя изменить его
ok, int* преобразуется в const int* (указатель на константу может быть связан с неконстантным объектом).
Цитата Сообщение от Billy_Milligan Посмотреть сообщение
p2=p3;//f, тоже что и выше.
ok, p2 и p3 имеют const нижнего уровня.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2016, 22:00
Помогаю со студенческими работами здесь

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} ...

Модификатор const для параметра функции не const?
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru