Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744

MS VS 2010 SP1: Неконстантный объект считается константным

29.10.2012, 08:52. Показов 783. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня шок!

2010 студия не работает на элементарном примере!
Неконстантный объект считается константным!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <set>
 
int _tmain(int argc, _TCHAR* argv[])
{
    {
        std::set<int> s;
        s.insert( 3 );
        std::set<int>::iterator ii = const_cast<std::set<int>&>(s).find( 3 );
        *ii = 4;
    }
 
    {
        std::set<int> s;
        s.insert( 3 );
        std::set<int>::iterator ii = s.find( 3 );
        *ii = 4;
    }
 
    return 0;
}


А вот 2005, 2008 компилируют, как и положено.
Проверял на двух компьютерах, поэтому я в смятении.

Кто-нибудь с этим сталкивался? Есть решение более элегантное, чем использование insert для изменённого значения? (у меня там поле класса редактируется).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2012, 08:52
Ответы с готовыми решениями:

Неконстантный указатель на константный объект
Добрый день, объясните пожалуйста, вот это: const int ival = 1024; int *const &amp;piref = &amp;ival; Типа мы создали дополнительное имя...

Установка SP1 для Visual Studio 2010
Здравствуйте. У меня есть 10ая студия (англ). На неё надо поставить SP1. Качаю его с оф. сайта:...

Странные изменения в работе VBA Excel 2010 под Windows 7 SP1 по сравнению с Windows XP
Добрый день. Сложилась следующая странная сутуация: В течение года пользуюсь макросом Excel обрабатвыающим данные в БД Access (MS...

7
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
29.10.2012, 10:11
set именно так и должен работать. Изменение ключа в ассоциативном контейнере не допускается.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
29.10.2012, 10:12
http://liveworkspace.org/code/... 86f221a04e
У Мейерса :
Совет 22
C++
1
2
3
4
 std::set<int> s;
        s.insert( 3 );
        std::set<int>::iterator ii = s.find( 3 );
        const_cast<int&>(*ii) = 4;
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2012, 10:47  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Изменение ключа в ассоциативном контейнере не допускается.
Да это всё понятно, я пример элементарный нарисовал. На самом деле у меня в нём объекты, сортированные по одному полю, а изменяются другие поля этого объекта.
Я же С++ программист, я не хочу, чтобы за меня решали, мне лучше знать, как нужно!

Цитата Сообщение от MrCold Посмотреть сообщение
Совет 22
Вот так у меня сейчас и работает, но не люблю я конст_каст.(

Отныне я буду заглядывать в стандарт, прежде чем жаловаться
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
29.10.2012, 10:53
Цитата Сообщение от Deviaphan Посмотреть сообщение
На самом деле у меня в нём объекты, сортированные по одному полю, а изменяются другие поля этого объекта.
Вот здесь вот есть неприятная для нас тонкость: Стандарт не говорит ничего определенного в отношении такой техники, *iterator может возвращать T&, а может возвращать и const T& - этот вопрос остается на усмотрение авторов реализации STL. Достоверно можно сказать одно: в силу этой особенности код может быть непереносимым.

(С моей сугубо имховой точки зрения, стоит задуматься - а правильно ли выбран контейнер?)
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2012, 11:09  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
а правильно ли выбран контейнер?
Другого выбора нет.( Последовательно добавляются объекты (в неизвестном количестве), при этом, если "сортируемое" поле у объектов одинаковое, то "суммируются" остальные поля этих объектов. И объектов этих от сотен до десятков тысяч. Пока их было не много, у меня в векторе хранились и линейным поиском искались и не знал я никаких проблем. А с ростом числа обрабатываемых объектов пришлось set подключать. Так я и узнал о том, что MSVC до 2010 версии не соответствовала стандарту.)
Если есть предложение по использованию другого контейнера, с удовольствием выслушаю.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
29.10.2012, 11:38
Хммм.... Строго говоря, не зная всех тонкостей твоей задачи, можно нафантазировать ой-ей-ей!.... :-)

Как бы сделал я (это пока свободный полет мысли... может, для тебя предложенный вариант не оптимален):
1. Завел бы хэш-функцию, которая по "ключевым полям" твоего объекта возвращает уникальный хэш для объекта. "Ключевых полей" может быть одно, а может быть - больше одного. Будут ли тебе когда-либо нужны более одного "ключевого поля" - это хз. Во всяком случае, если такая задача возникнет, переделке подвергается только хэш-функция и ничего больше.
2. Хранил бы объекты в карте map<хэш, объект>.

[И да, MSVC++ до 2010 вполне соотвествует Стандарту, - просто Стандарт о характерном для тебя поведении умалчивает :-))) ]
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2012, 11:51  [ТС]
Сложно хэш-функцию придумать. Ключевые поля на самом деле не равны могут быть и "округлить" их до какого-то общего состояния не представляется возможным. Можно, конечно, создать map и продублировать ключевое поле объекта в ключевом поле мэпа... И всего на несколько мегабайт использование памяти возрастёт... А я, наверное, лучше так и сделаю! Хоть const_cast'ом вонять не придётся.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2012, 11:51
Помогаю со студенческими работами здесь

С клавиатуры вводится строка, в ней и+1 меняется с и-1 элементом, считается количество таких перестановок, после этого считается сумма всех четных си
Дорогие форумчане, вы не раз мне помогали в решении проблем, но сегодня проблема, с которой я столкнулся для меня оказалась нерешима. С...

2010 - Ссылка на объект не указывает на экземпляр объекта
на сколько я помню у меня произошел какой-то форс-мажор и студия вылетела. какой именно форс-мажор я не помню. в итоге сейчас когда я...

PP 2010: По нажатию на объект воспроизводить и останавливать воспроизведение звука
для вас это нверное не проблема будет, а я сломал голову уже) суть в чем: нажимаешь на объект - начинается музыка, нажимаешь опять -...

Список: Взять исходный список SP и создать два новых списка SP1 и SP2. SP1 содержит нечетные узлы, а SP2 – четные
Что-то карета не вывезла и превратилась в тыкву. не могу понять почему данные не записывают в SP2 не понимаю почему в SP1 только...

Работа с константным указателем
Ребят, добрый всем вечер!!! Помогите пожалуйста разобраться с задачей. есть константный указатель на строку LPCSTR FileName =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru