ещё одна загадка ) |
Здравствуйте, гость ( Вход | Регистрация )
ещё одна загадка ) |
Алексей1153 |
10.12.2012, 15:00
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
CONSTref - константный указатель на контейнер. Стало быть содержимое контейнера тоже должно быть недоступно для изменения через эту ссылку. Но:
|
|
|
Iron Bug |
10.12.2012, 16:26
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
совершенно верно. потому что мап твой объявлен без константы. если бы был
- тогда он бы ругался.а сам объект не меняется. вот, например, insert тут уже не проканает. а изменение элементов - без проблем. |
|
|
Алексей1153 |
11.12.2012, 19:00
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
дело как раз в том, что мне там не нужно делать константу ))
Но мне это ничем не мешает, просто странно |
|
|
Iron Bug |
11.12.2012, 20:49
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
да нет в этом ничего странного. всё строго по определениям, которые ты сам задал.
|
|
|
Алексей1153 |
12.12.2012, 14:27
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
погоди-погоди. Смотри, есть константная ссылка на объект. Это означает, что, не прибегая к явному приведению, мы не можем менять содержимое объекта, вызывает не-const функции, так ?
и с оператором [] это ожидаемо правильно. А вот оператор -> позволил получить неконстантный указатель на элемент объекта. Вот это и смущает |
|
|
Iron Bug |
12.12.2012, 15:27
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
а содержимое объекта и не меняется. твой объект - мап. ты получил элемент-указатель. при манипуляциях с этим указателем сам он никак не меняется, меняется значение по адресу, на который он указывает. а это к твоему объекту никак не относится.
если ты хочешь защиты каких-то дополнительных данных, явно не принадлежащих объекту, то тебе надо писать класс и явно определять методы доступа, с указанием const для тех, которые ты считаешь не изменяющими объект манипуляциями. Сообщение отредактировал Iron Bug - 12.12.2012, 15:34 |
|
|
ssoft |
12.12.2012, 16:32
Сообщение
#7
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
CONSTref - константный указатель на контейнер. Стало быть содержимое контейнера тоже должно быть недоступно для изменения через эту ссылку. Но:
Все правильно, сам second является частью td_map и его нельзя изменить, а указывает он на значение типа int, которое не является частью td_map, и его можно менять сколько душе угодно. Можно даже вызывать у такого объекта не константные методы, если вместо указателя на int хранить указатель на объект какого-либо класса. А вот, если объекты не должны изменятся через map, то хранить нужно константные указатели на них.
но об этом уже писали. |
|
|
Влад |
12.12.2012, 17:04
Сообщение
#8
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
|
|
|
Iron Bug |
12.12.2012, 18:03
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
|
|
|
ssoft |
13.12.2012, 8:14
Сообщение
#10
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
|
|
|
Текстовая версия | Сейчас: 29.11.2024, 6:25 |