- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
protected String createPublicCacheKey(String...keyElements) {
String initial = "public";
StringBuilder format = new StringBuilder();
format.append(initial);
for(int i=0;i<keyElements.length;i++) {
format.append(".%s");
}
return String.format(format.toString(), keyElements);
}
GQuark
в крестах компилятор следит за const, а не мартышка
есть помеченные как константные
такие объекты отслеживаются компилятором, для них свои правила применения их методов и методов над ними, компилятор сильно тревожится, если ты пытаешься залезть к ним в карман
но если ты очень-очень хочешь, ты можешь написать дополнительные действия, которые позволят тебе задрать штанину, спустить носок, снять ружье с предохранителя и таки ебануть себе в ногу
но случайно этого не сделать
а в половине случаев в конце ещё окажется, что вместо оригинальной ноги ты задрал штанину на манекене, который и так собрались уже завтра выбросить
Я >> отчего же? Именно для это в дотнете строки и сделаны неизменяемыми
Аска >> В тех же крестах строки мутабельные. Что совершенно не мешает безопасно использовать их в качестве ключей.
Диффи >> в крестах компилятор следит за const, а не мартышка
В итоге - либо неизменяемость строк (иммутабельность или константы) либо следить что бы никто не положил мапу нахуй.
Я нихуя не понимаю в каком месте вы хотите сделать мну виноватым.
Тут какая то эпидемия? У меня такое ощущение, что если я зайду через год, и скажу что типа "да, так и есть, двоичный код состоит из 1 и 0" меня изобьют, обольют бензином и сожгут.
Опасна ли эта мутабельность для мапы? Нет.
Нужна ли следящая мартышка? Нет. std::string - мутабельная строка? Да.
в плюсах нет аналогичной проблемы? (ну только со строками)
http://ideone.com/XAE6Z0
Неа, нету. http://ideone.com/xokXst
> ну только со строками
Для любой фигни, ведущей себя как value type этой проблемы нету. Можно даже std::map<std::vector<std::queue<int>>, std::string> заюзать в качестве ключа для мапы. Но не нужно.
Как говорит выше Борманд, Для любой фигни, ведущей себя как value type этой проблемы нету.
Зачем же так дословно портировать? :) Это эквивалентно std::map<myobj, int> map; А ближе к коду кегдана будут new и смартпоинтер.
Кстати, а штатными средствами (используя публичные методы, не залезая внутрь) можно погнуть std::map, подсунув объект Кегдана? Или только указатель/смартпоинтер/иной объект с указателем на что-то внутри?
Я попытался с обычным объектом, но у меня руки слабые: http://ideone.com/Fqb5kM.
сделай недетерминированное сравнение, и уникальность ключей в мапе пойдет по пизде
да
Ты наркоман штоле? Погнул же как Кегдан у себя в C#, но не заметил.
http://ideone.com/06SKkz
Массивы уже порвались?
> либо неизменяемость строк (иммутабельность или константы) либо следить что бы никто не положил мапу нахуй
Что значит "положить мапу нахуй"? Написать свою map<string, pituh> с возможностью изменить любой ключ (а значит - бесплатно создавать дубликаты) её пользователям?
Или тут про какие-то оптимизации и пирфомансе говорится? (положить == заDoSить) Неизменяемая строка => её можно закэшировать и свести к указателю => сравнивать 4-8 байт, а не 0-100500?
хотя все равно язык говно, там же нет вывода типов