Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71

Использование ключевого слова const

22.03.2010, 16:17. Показов 2134. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как понимать такое:

C++
1
2
3
const int a; // понятно это константа с именем - а
int const a; // ? непонятно что это
const int const a; // ? тож не понятно чо эт такое
применение слова const в последних двух строках для меня загадка, хотя все три строки успешно проходят компиляцию
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2010, 16:17
Ответы с готовыми решениями:

Ключевое слово const после ключевого слова new
Наткнулся на такую запись const int* ciq = new const int (3); Какую роль играет const после new?

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода
Всем привет. Недавно на просторах интернета столкнулся с таким кодом: typedef double(*pointFunc)(double); double f(double x) { ...

Польза от ключевого слова override
Для примера привожу код : class abstract { public : virtual void get() = 0; virtual int show(); }; ...

16
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.03.2010, 16:22
Главное не путай вот это:
int *const p; /*указатель в котором значение меня нельзя: нельзя присваивать другие адреса,
требует инициализации при создании */
const int *p; /* указатель на константу, то есть этот указатель использует память для чтения.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 16:23
1-2 - одно и то же
а вместо третьего, полагаю, подразумевается:
C++
1
2
    int b=4;
    const int* const a=&b;//Константный указатель на константу
Т.е. нельзя ни изменить адрес, на который ссылается указатель, ни значение, которое хранится по этому адресу
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.03.2010, 16:28
const int* const a=&b;//Константный указатель на константу
Так же предложу альтернативу: константному указателю на константу,
она проще в обращении:
Константная ссылка:
C++
1
2
int r = 20;
const int& p = r;  //константная ссылка на r
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.03.2010, 16:41
Константой является то что стоит слева от ключевого слова const. Мне так проще было запомнить разницу в константных указателях xD
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
22.03.2010, 18:33
в данном случае нет разницы.
с указателями
C++
1
2
3
const int *a=0;//можно меня адрес что в указателя,но не ее значение
int const *b=0;//можно меня значение но не адрес
const int const *c=0;//не то не то
Добавлено через 31 секунду
если под рукой есть книга С++ за 21 день открой раздел указатели и читай...подробнейшим образом написано
0
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 20:06  [ТС]
я не про употребление слова const с указателями спрашиваю, а про правила его употребления вообще, наверняка есть простое правило что относительно чего становится константным. например проканывает и такое:

C++
1
const int const func(){return 0;}
Цитата Сообщение от МедведЪ Посмотреть сообщение
в данном случае нет разницы.
с указателями
C++
1
2
3
const int *a=0;//можно меня адрес что в указателя,но не ее значение
int const *b=0;//можно меня значение но не адрес
const int const *c=0;//не то не то
Добавлено через 31 секунду
если под рукой есть книга С++ за 21 день открой раздел указатели и читай...подробнейшим образом написано
автор этой книги так увлекается словом const что некоторые его листинги не компилируются. кстати какя разница между переменной и указателем если это тоже обычная переменная но содержащая адрес (кстати в этой книге же написано). значит с указателем и переменной можно работать одинаково. ПРАВИЛО ДОЛЖНО БЫТЬ КАКОЕ ТО ток не знаю какое.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
22.03.2010, 20:10
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.
Цитата Сообщение от pontakrin Посмотреть сообщение
автор этой книги так увлекается словом const что некоторые его листинги не компилируются
а в чем этого плохого...там правильно сказано,если пермененная не должна меняться то лучше для своего удобства писать конст,чтобы в гигантских кодах во время такой ошибки не стоило бы разбивать голову об стенку...и приведи пример который не коиплируется...и зы может это пиратская версия
0
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 21:12  [ТС]
Цитата Сообщение от МедведЪ Посмотреть сообщение
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.

а в чем этого плохого...там правильно сказано,если пермененная не должна меняться то лучше для своего удобства писать конст,чтобы в гигантских кодах во время такой ошибки не стоило бы разбивать голову об стенку...и приведи пример который не коиплируется...и зы может это пиратская версия
попробуй скомпилировать листинг 16.2
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
22.03.2010, 22:04
у меня в послднем томе 13.4...выложи код,продолжении книги не у меня
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.03.2010, 22:58
Цитата Сообщение от pontakrin Посмотреть сообщение
правила его употребления вообще, наверняка есть простое правило что относительно чего становится константным.
Перечитай сообщение под номером 5
0
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71
23.03.2010, 08:28  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
Константой является то что стоит слева от ключевого слова const. Мне так проще было запомнить разницу в константных указателях xD
объясни подробней, а то понять не могу. например у:

C++
1
const int a;
слева от слова const нет ничего, а константным стала сама переменная а. Может быть все таки справа?

Добавлено через 4 минуты
Цитата Сообщение от МедведЪ Посмотреть сообщение
у меня в послднем томе 13.4...выложи код,продолжении книги не у меня
тут файлы прикреплять нельзя а другими листингами (не по теме) топик наполнять, черное дело. просто поверь мне на слово и все. Я сюда не спорить пришел
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
23.03.2010, 10:04
C++
1
const int a;
Этот случай не входит в правило написания const слева, вопрос о стиле программирования. Тоже самое можно написать, как
C++
1
int const a;
Теперь подробнее:
При использовании const с указателями, действие модификатора может распространяться либо на значение указателя, либо на данные на которые указывает указатель.
Работает (const относится к данным):
C++
1
2
const char * a = "a";
a="b";
Тоже самое и тоже работает:
C++
1
2
char const * a = "a";
a="b";
А вот это уже не работает:
C++
1
2
char * const a = "a";
a="b"; // <-- не работает
Если бы операция присвоения изменяла бы не указатель, а данные:
C++
1
*a = 'Y';
то ситуация была бы диаметрально противоположной...

То есть, когда пишешь const пиши его правее от того, что ты не хочешь изменять:
C++
1
2
3
4
int const a; // не хочу изменять значение, которое хранится в - int
int const * a; // не хочу изменять значение, то есть которое хранится в - int
int * const a; // не хочу изменять адрес, то есть указатель - *
int const * const a; // не хочу изменять ни адрес ни значение.
А вот строка, которую ты привел в примере, на gcc компиляцию не проходит и приводит к ошибке 'duplicate const'
Цитата Сообщение от pontakrin Посмотреть сообщение
const int const a;
1
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71
23.03.2010, 13:26  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
А вот строка, которую ты привел в примере, на gcc компиляцию не проходит и приводит к ошибке 'duplicate const'
зато работает на MS компиляторе

спасибо за помощь
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
23.03.2010, 13:32
зато работает на MS компиляторе
MS Компилятор штука страшная, лучше держись близ стандарта ))..
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.03.2010, 17:21
Можно тут почитать
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
23.03.2010, 17:42
Цитата Сообщение от fasked Посмотреть сообщение
MS Компилятор штука страшная, лучше держись близ стандарта ))..
а что в вашем понятии стандарт?
и в компиляторах каких фирм он сохранился?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2010, 17:42
Помогаю со студенческими работами здесь

Работа ключевого слова extern
Здравствуйте. Скажите пожалуйста, почему так с extern нельзя поступать? #include &lt;iostream&gt; int main() { ...

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

Объяснить назначение ключевого слова static
Здравствуйте! Я пытаюсь разобраться с использованием static`a и у меня такой вопрос: будет ли корректно работать программа...

Выделение памяти с использованием ключевого слова new и исключения
Где-то читал, что наличие в коде throw, даже в том случае когда нет try/catch может приводить к некоторым замедлению потому что где-то...

Дайте характеристику применения ключевого слова enum
Дайте характеристику применения ключевого слова enum. Какие приимущества такого применения по сравнению с исользованием символических...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru