Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
pontakrin
1 / 1 / 0
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 16:17     Использование ключевого слова const #1
как понимать такое:

C++
1
2
3
const int a; // понятно это константа с именем - а
int const a; // ? непонятно что это
const int const a; // ? тож не понятно чо эт такое
применение слова const в последних двух строках для меня загадка, хотя все три строки успешно проходят компиляцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 16:22     Использование ключевого слова const #2
Главное не путай вот это:
int *const p; /*указатель в котором значение меня нельзя: нельзя присваивать другие адреса,
требует инициализации при создании */
const int *p; /* указатель на константу, то есть этот указатель использует память для чтения.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 16:23     Использование ключевого слова const #3
1-2 - одно и то же
а вместо третьего, полагаю, подразумевается:
C++
1
2
    int b=4;
    const int* const a=&b;//Константный указатель на константу
Т.е. нельзя ни изменить адрес, на который ссылается указатель, ни значение, которое хранится по этому адресу
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 16:28     Использование ключевого слова const #4
const int* const a=&b;//Константный указатель на константу
Так же предложу альтернативу: константному указателю на константу,
она проще в обращении:
Константная ссылка:
C++
1
2
int r = 20;
const int& p = r;  //константная ссылка на r
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.03.2010, 16:41     Использование ключевого слова const #5
Константой является то что стоит слева от ключевого слова const. Мне так проще было запомнить разницу в константных указателях xD
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
22.03.2010, 18:33     Использование ключевого слова const #6
в данном случае нет разницы.
с указателями
C++
1
2
3
const int *a=0;//можно меня адрес что в указателя,но не ее значение
int const *b=0;//можно меня значение но не адрес
const int const *c=0;//не то не то
Добавлено через 31 секунду
если под рукой есть книга С++ за 21 день открой раздел указатели и читай...подробнейшим образом написано
pontakrin
1 / 1 / 0
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 20:06  [ТС]     Использование ключевого слова const #7
я не про употребление слова 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 что некоторые его листинги не компилируются. кстати какя разница между переменной и указателем если это тоже обычная переменная но содержащая адрес (кстати в этой книге же написано). значит с указателем и переменной можно работать одинаково. ПРАВИЛО ДОЛЖНО БЫТЬ КАКОЕ ТО ток не знаю какое.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
22.03.2010, 20:10     Использование ключевого слова const #8
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.
Цитата Сообщение от pontakrin Посмотреть сообщение
автор этой книги так увлекается словом const что некоторые его листинги не компилируются
а в чем этого плохого...там правильно сказано,если пермененная не должна меняться то лучше для своего удобства писать конст,чтобы в гигантских кодах во время такой ошибки не стоило бы разбивать голову об стенку...и приведи пример который не коиплируется...и зы может это пиратская версия
pontakrin
1 / 1 / 0
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 21:12  [ТС]     Использование ключевого слова const #9
Цитата Сообщение от МедведЪ Посмотреть сообщение
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.

а в чем этого плохого...там правильно сказано,если пермененная не должна меняться то лучше для своего удобства писать конст,чтобы в гигантских кодах во время такой ошибки не стоило бы разбивать голову об стенку...и приведи пример который не коиплируется...и зы может это пиратская версия
попробуй скомпилировать листинг 16.2
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
22.03.2010, 22:04     Использование ключевого слова const #10
у меня в послднем томе 13.4...выложи код,продолжении книги не у меня
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.03.2010, 22:58     Использование ключевого слова const #11
Цитата Сообщение от pontakrin Посмотреть сообщение
правила его употребления вообще, наверняка есть простое правило что относительно чего становится константным.
Перечитай сообщение под номером 5
pontakrin
1 / 1 / 0
Регистрация: 22.03.2010
Сообщений: 71
23.03.2010, 08:28  [ТС]     Использование ключевого слова const #12
Цитата Сообщение от fasked Посмотреть сообщение
Константой является то что стоит слева от ключевого слова const. Мне так проще было запомнить разницу в константных указателях xD
объясни подробней, а то понять не могу. например у:

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

Добавлено через 4 минуты
Цитата Сообщение от МедведЪ Посмотреть сообщение
у меня в послднем томе 13.4...выложи код,продолжении книги не у меня
тут файлы прикреплять нельзя а другими листингами (не по теме) топик наполнять, черное дело. просто поверь мне на слово и все. Я сюда не спорить пришел
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
23.03.2010, 10:04     Использование ключевого слова const #13
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;
pontakrin
1 / 1 / 0
Регистрация: 22.03.2010
Сообщений: 71
23.03.2010, 13:26  [ТС]     Использование ключевого слова const #14
Цитата Сообщение от fasked Посмотреть сообщение
А вот строка, которую ты привел в примере, на gcc компиляцию не проходит и приводит к ошибке 'duplicate const'
зато работает на MS компиляторе

спасибо за помощь
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
23.03.2010, 13:32     Использование ключевого слова const #15
зато работает на MS компиляторе
MS Компилятор штука страшная, лучше держись близ стандарта ))..
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
23.03.2010, 17:21     Использование ключевого слова const #16
Можно тут почитать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2010, 17:42     Использование ключевого слова const
Еще ссылки по теме:

Каково практическое применение ключевого слова "protected" ? C++
C++ Модификатор const для параметра функции не const?
Работа ключевого слова extern C++

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

Или воспользуйтесь поиском по форуму:
kuroiryuu
 Аватар для kuroiryuu
311 / 295 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
23.03.2010, 17:42     Использование ключевого слова const #17
Цитата Сообщение от fasked Посмотреть сообщение
MS Компилятор штука страшная, лучше держись близ стандарта ))..
а что в вашем понятии стандарт?
и в компиляторах каких фирм он сохранился?
Yandex
Объявления
23.03.2010, 17:42     Использование ключевого слова const
Ответ Создать тему
Опции темы

Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru