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

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

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

как понимать такое:

C++
1
2
3
const int a; // понятно это константа с именем - а
int const a; // ? непонятно что это
const int const a; // ? тож не понятно чо эт такое
применение слова const в последних двух строках для меня загадка, хотя все три строки успешно проходят компиляцию
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2010, 16:17
Ответы с готовыми решениями:

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

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода
Всем привет. Недавно на просторах интернета столкнулся с таким кодом: typedef...

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

Работа ключевого слова extern
Здравствуйте. Скажите пожалуйста, почему так с extern нельзя поступать? #include <iostream>...

16
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.03.2010, 16:22 2
Главное не путай вот это:
int *const p; /*указатель в котором значение меня нельзя: нельзя присваивать другие адреса,
требует инициализации при создании */
const int *p; /* указатель на константу, то есть этот указатель использует память для чтения.
0
Эксперт С++
5820 / 3472 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 16:23 3
1-2 - одно и то же
а вместо третьего, полагаю, подразумевается:
C++
1
2
    int b=4;
    const int* const a=&b;//Константный указатель на константу
Т.е. нельзя ни изменить адрес, на который ссылается указатель, ни значение, которое хранится по этому адресу
1
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.03.2010, 16:28 4
const int* const a=&b;//Константный указатель на константу
Так же предложу альтернативу: константному указателю на константу,
она проще в обращении:
Константная ссылка:
C++
1
2
int r = 20;
const int& p = r;  //константная ссылка на r
0
Эксперт С++
5026 / 2605 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
22.03.2010, 16:41 5
Константой является то что стоит слева от ключевого слова const. Мне так проще было запомнить разницу в константных указателях xD
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
22.03.2010, 18:33 6
в данном случае нет разницы.
с указателями
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  [ТС] 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 что некоторые его листинги не компилируются. кстати какя разница между переменной и указателем если это тоже обычная переменная но содержащая адрес (кстати в этой книге же написано). значит с указателем и переменной можно работать одинаково. ПРАВИЛО ДОЛЖНО БЫТЬ КАКОЕ ТО ток не знаю какое.
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
22.03.2010, 20:10 8
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.
Цитата Сообщение от pontakrin Посмотреть сообщение
автор этой книги так увлекается словом const что некоторые его листинги не компилируются
а в чем этого плохого...там правильно сказано,если пермененная не должна меняться то лучше для своего удобства писать конст,чтобы в гигантских кодах во время такой ошибки не стоило бы разбивать голову об стенку...и приведи пример который не коиплируется...и зы может это пиратская версия
0
1 / 1 / 1
Регистрация: 22.03.2010
Сообщений: 71
22.03.2010, 21:12  [ТС] 9
Цитата Сообщение от МедведЪ Посмотреть сообщение
с помощью указателей можно работать с дин.памятью,с их помощью можно из ф-ии возвращать много значений.

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

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

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

спасибо за помощь
0
Эксперт С++
5026 / 2605 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
23.03.2010, 13:32 15
зато работает на MS компиляторе
MS Компилятор штука страшная, лучше держись близ стандарта ))..
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,538
Записей в блоге: 30
23.03.2010, 17:21 16
Можно тут почитать
0
326 / 310 / 68
Регистрация: 05.11.2009
Сообщений: 712
23.03.2010, 17:42 17
Цитата Сообщение от fasked Посмотреть сообщение
MS Компилятор штука страшная, лучше держись близ стандарта ))..
а что в вашем понятии стандарт?
и в компиляторах каких фирм он сохранился?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2010, 17:42

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.