Заблокирован
|
|||||||||||
1 | |||||||||||
Модификатор const в аргументах функций19.07.2011, 22:29. Показов 5662. Ответов 31
Метки нет (Все метки)
Постоянно путаюсь в этих константах. Как писать грамотнее?
Вот так:
А что подскажут уважаемые эксперты? Или может быть есть ещё какие то варианты?
0
|
19.07.2011, 22:29 | |
Ответы с готовыми решениями:
31
Модификатор const для параметра функции не const? Const-параметры в аргументах функции Модификатор доступа const Модификатор const Очередные грабли с++? |
Заблокирован
|
|
20.07.2011, 08:07 [ТС] | 21 |
Но он может обнулиться!
Он гарантирует, что ничего не сделает с содержимом того, на что указывает. Но с самим собой он может делать что угодно! Добавлено через 7 минут Нет, ибо данная переменная "перемена" по задумке и логике.
0
|
20.07.2011, 08:23 | 22 | |||||
Ну тут проблема была бы если бы указатель был const (а не то, на что он указывает).
Вот абсолютно нормальный код:
1
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
20.07.2011, 08:45 | 23 | ||||||||||
Сообщение от Bers
Сообщение от Bers
присваивать нельзя именно в таком случае, когда происходит неявная потеря свойства неизменности данных то есть были константные данные, указатель на них присвоили указателю, который указывает на неконстантные данные Добавлено через 9 минут
Код
[guest@localhost tests]$ .ansi t.c -o t t.c: В функции ‘main’: t.c:12:8: предупреждение: присваивание отменяет квалификаторы указуемого типа [guest@localhost tests]$
1
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||||||||||
20.07.2011, 08:56 | 24 | ||||||||||
Не стоит путать константный указатель и указатель на константу.
Можно заменить на
А вообще, почитай, что значит вот это:
1
|
20.07.2011, 18:47 | 25 | |||||
Само приведение типа, может повлиять на данные, вот пример .
1
|
Заблокирован
|
|
20.07.2011, 19:51 [ТС] | 26 |
Ну все, вразумел вроде бы. Блин... даже и не подумал бы, что столько нюансов может быть с этой константностью.
Моя идея о том, что константа - это "переменная" ONLY READ рассыпается на куски.... А жаль.... Ещё совсем вчера было намного проще жить в этом мире. Последний вопрос: Допустим мой Потребитель "запоминает" где живёт его Менеджер. Внутри класса Потребителя находится указатель на объект класса Менеджера. Поскольку внутри Потребителя никогда не будут происходить операции типа: delete pМенеджер; pМенеджер = NULL; Более того - и не должны происходить! То указатель на менеджера можно (а значит и нужно) сделать константным. Это будит означать, что Потребитель не отвечает, за время жизни своего Менеджера. И Ничего не может сделать с той областью памяти, где этот Менеджер живёт (не может его убить). Я все правильно понял?
0
|
20.07.2011, 20:00 | 27 |
Сообщение было отмечено как решение
Решение
Bers, не видя всего исходника целиком сложно понять, чего конерктно ты не понимаешь или понимаешь, но не правильно. На всякий случай почитай тут Неочевидные ответы на простые вопросы раздел 4, лишним не будет
Добавлено через 27 секунд Только при этом программист - сам дурак
3
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
20.07.2011, 20:02 | 28 |
Константный указатель - это указатель на область памяти, которому нельзя присвоить указатель на другую область памяти.
Указатель на константу - это указатель на область памяти, которую нельзя изменить через этот указатель. Константный указатель на константу - оба этих ограничения.
1
|
20.07.2011, 20:08 | 29 |
Причём надо понимать, что "нельзя" в обоих случаях означает "нельзя в языке программирования". И в подавляющем большинстве случаев это означает "если очень хочется, то можно, но компилятор за последствия не отвечает". А в оставшихся случаях это действительно "нельзя", потому что тебе это не даст сделать операционная система или даже аппаратура
1
|
Заблокирован
|
|
20.07.2011, 20:24 [ТС] | 30 |
У меня была путаница в голове, я думал что константный указатель указывает собственно на константу, а не то, что он сам по себе является константой.
Теорию проштудировал, ошибку осознал. Если и остались ещё какие то неясности - думаю практика это исправит. Всем огромное спасибо за участие. Думаю, что тему можно закрыть.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
21.07.2011, 08:18 | 32 |
Привидение типа на данные не повлияло. Это следующее за ним присваивание повлияло.
0
|
21.07.2011, 08:18 | |
21.07.2011, 08:18 | |
Помогаю со студенческими работами здесь
32
Модификатор const в качестве возвращаемого значения Чисто виртуальные классы. Модификатор const В чем различия константных объектов и константных ссылок на объекты в аргументах функций-членов? int const * const foo(const int* param) const - разъясните значение квалификаторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |