Заблокирован
|
|||||||||||
1 | |||||||||||
Модификатор const в аргументах функций19.07.2011, 22:29. Показов 5773. Ответов 31
Метки нет (Все метки)
Постоянно путаюсь в этих константах. Как писать грамотнее?
Вот так:
А что подскажут уважаемые эксперты? Или может быть есть ещё какие то варианты?
0
|
19.07.2011, 22:29 | |
Ответы с готовыми решениями:
31
Модификатор const для параметра функции не const? Const-параметры в аргументах функции Модификатор доступа const Модификатор const Очередные грабли с++? |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
19.07.2011, 22:32 | 2 | |||||
Bers, Вообще const есть const... А вы присваиваете этот указатель другому => две переменные указывают на 1 адрес... В функции-то он конечно не меняется... Так что спорно. Я бы писал const.
Ну и вообще имхо резоннее делать через swap или же как в auto_ptr к примеру.
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
19.07.2011, 22:45 | 6 | |||||
Не зная реализации трудно подсказать но все же...
1
|
19.07.2011, 22:46 | 7 | |||||
ForEveR, либо я тебя не понял, либо ты ошибаешься.
Елси я правильно понял, предлагается такой вариант:
1
|
Kastaneda
|
19.07.2011, 22:49
#9
|
Не по теме: А, все понял. Это я в суть дела невъехал))
1
|
Заблокирован
|
|
19.07.2011, 22:54 [ТС] | 10 |
Суть в том, что если функция использует свои аргументы только для чтения, то идеологически их нужно объявлять константами. (правило хорошего тона. Хотя лично мне оч не нравится. Но вот, приходится приучать себя)
Но моя функция действительно только читает значение аргумента. Однако! Попандос. Присвоить неконстрантному указателю значение константного нельзя. Что делать? Я только два варианта придумал: либо послать константы нафег (раньше я всегда так и делал), либо использовать кастование. Оба варианта - рабочие, вопрос в том, какой более грамотный? Или может быть вообще, православные люди делают как то иначе?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
19.07.2011, 23:23 | 11 |
Bers, дико непривычная сигнатура. опер присваивания ничего не возвращающий...
1
|
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
|
|
19.07.2011, 23:36 | 12 |
Если используется const, то вызов функции должен проходить абсолютно безопасно(в смысле изменения) для её параметров, а здесь, хоть функция сама их и не изменяет, но присваивает адрес тем самым создает условия для дальнейшего их изменения. Так что я бы const не использовал.
1
|
Заблокирован
|
|
20.07.2011, 05:47 [ТС] | 13 |
это запрет на конструкции типа А=В=С
Добавлено через 6 часов 1 минуту Я подумал, и решил, что вы правы. Ели функция не может дать 100% гарантии, что значение константы не изменится, то конст_каст здесь больше смахивает на лёгкий хак с целью нарушить гарантии функции. И применять его стоит только тогда, когда без него вообще никак не обойтись...
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||
20.07.2011, 06:35 | 14 | |||||
Этот запрет делается опять возвратом const...
1
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||||||||||
20.07.2011, 07:08 | 15 | |||||||||||||||
1
|
Заблокирован
|
|
20.07.2011, 07:32 [ТС] | 16 |
Суть в том, что извне приходит адрес объекта. И с этим объектом ничего не должно случиться.
mp_Pointer лишь хранит этот адрес. и все. Больше ничего не делает. Более того, объект класса может избавиться от объекта (обнулить свой mp_Pointer) Но это никак не должно коснуться того объекта, чей адрес помнит mp_Pointer Если туманно и не понятно, я могу выложить больше инфы и кода. Я просто не хочу напрягать читателей обилием букв и кода Добавлено через 4 минуты Я всесторонне изучу этот момент... Правда я не понимаю, для чего, что бы запретить действие возвращать нечто в виде константы? По моему, проще просто запретить...
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
20.07.2011, 07:42 | 17 | ||||||||||
Сообщение от Bers
если через него не меняются данные, то он должен указывать на const
Сообщение от Bers
1
|
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
|
|||||||||||
20.07.2011, 07:47 | 18 | ||||||||||
Тогда объявите указатель на константу
1
|
Заблокирован
|
|
20.07.2011, 07:57 [ТС] | 19 |
1. Он никак не изменяет состояние объекта о котором "помнит". Но он может к примеру "забыть все". Объект от этого никак не пострадает, просто mp_Pointer обнулиться. Тобишь, mp_Pointer так же гарантированно используется исключительно для чтения, либо обнуляется. Это гарантирует программист. 2. Да Добавлено через 4 минуты An1ka, милая, вы не поняли о чём речь.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
20.07.2011, 07:57 | 20 | |||||
Сообщение от Bers
имя типа TypeT должно быть там известно
1
|
20.07.2011, 07:57 | |
20.07.2011, 07:57 | |
Помогаю со студенческими работами здесь
20
Модификатор const в качестве возвращаемого значения Чисто виртуальные классы. Модификатор const В чем различия константных объектов и константных ссылок на объекты в аргументах функций-членов? int const * const foo(const int* param) const - разъясните значение квалификаторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |