- *c++Вот бы можно было объявлять переменную как не-const, а потом, после некоторого блока, навешивать const. Удобно — создал какую-нибудь там std::map, заполнил в цикле, навеcил const и точно знаешь, что дальше она не поменяется. Можно наслаждаться тайпчекингом и грабить корованы.from Azoth_primary, 4 months ago
Replies (45)
- @0xd34df00d:@NetBUG Это рантайм-проверка и говно. Чем больше ты переносишь в компил-тайм, тем лучше.from Azoth_primary, 4 months ago, in reply to /2
- @0xd34df00d:@demiazz ШТО
И так для любого типа, включая скалярные?from Azoth_primary, 4 months ago, in reply to /5 - @0xd34df00d:@aix27249 Да, но это костыль. Да и никто не мешает, вообще говоря, исходную мапу модифицировать, если она все еще в области видимости.from Azoth_primary, 4 months ago, in reply to /4
- @demiazz:ну как костыльное решение по крайней мере ) в руби к примеру такой метод у каждого класса в стандартной библиотеке. но там легче — это ж динамический языкfrom Gajim, 4 months ago
- @0xd34df00d:@NetBUG Одно дело — специально сломать, другое — по невнимательности поменять или не заметить сайд-эффектов какого-нибудь метода.from Azoth_primary, 4 months ago, in reply to /12
- @aix27249:@0xd34df00d вообще, я такое просто стараюсь разносить по функциям.from Zombie Box, 4 months ago, in reply to /13
- @k0st1x:а мона в плюсах сделать обертку, которая сама меняет у себя внутрях map<class> на map<const class> ?
просто аналогия какого нить HybridDictionary — сама знает, кем ей быть — связным списком, хэштаблицей или еще каким кракозяблом. или в плюсах нельзя копировать объект в const объект?from Work, 4 months ago - @NetBUG:@0xd34df00d "трогать исходную мапу" — это уже "специально ломать".from qutIM, 4 months ago, in reply to /13
- @0xd34df00d:@nib952051 За const_cast надо вырывать руки вообще всегда и в любых ситуациях. Хотя бы потому, что это UB.from Azoth_primary, 4 months ago, in reply to /16
- @0xd34df00d:@k0st1x Я сходу не могу придумать разумного способа сделать так, чтобы враппер был достаточно прозрачным.from Azoth_primary, 4 months ago, in reply to /15
- @nib952051:@0xd34df00d не ну я же не написал следуй на в java'у, и не стал предлагать копировать мапу:)from popsi popove ver. 0.3, 4 months ago, in reply to /18
- @demiazz:а еще что то говорят про динамическую и утиную типизацию. извращенцыfrom Gajim, 4 months ago
- @0xd34df00d:@demiazz Твоя ремарка была бы обоснована, если бы я пытался привнести динамизма, а тут обратная ситуация )from Azoth_primary, 4 months ago, in reply to /23
- @0xd34df00d:@exception13 Ты делаешь меня грустной пандой. Не в рантайм-проверке дело, а в компил-тайм средствами тайпчекера компилятора.from Azoth_primary, 4 months ago, in reply to /25
- @0xd34df00d:@exception13 И да, хуй знает, что нижележащий класс успел повыделять в плане памяти и куда детали реализации указывают. Может, там вообще pimpl.from Azoth_primary, 4 months ago, in reply to /25
- @NetBUG:@0xd34df00d Ну кроме заныкивания оригинала в приваты и константной сыылки — вроде никак.from qutIM, 4 months ago, in reply to /26
- @demiazz:да я к тому что, извращения на плюсах порой страшны и ужасны ) не плохи. именно страшны и ужасны ))))from Gajim, 4 months ago
- @0xd34df00d:@NetBUG В приваты — генерить класс. Вне скоупа — константной ссылке пизда.from Azoth_primary, 4 months ago, in reply to /29
- @NetBUG:@0xd34df00d Класс, естественно.
А у тебя чисто императивная модель? =)from qutIM, 4 months ago, in reply to /31 - @0xd34df00d:@NetBUG Нет, но делать класс-оболочку на это — оверкилл.from Azoth_primary, 4 months ago, in reply to /32
- @NetBUG:@0xd34df00d Оболочку — думаю, овер.
Но ведь мапа не просто так должна быть константной, я думаю, темповые вещи не стоят того. А если ты, к примеру, загружаешь словарь из фfйла и не хочешь его похерить — почему бы не загружать его отдельным классом?from qutIM, 4 months ago, in reply to /33 - @0xd34df00d:@NetBUG Потому что делать по классу на каждое место, где семантически можно поставить const — это пиздец.from Azoth_primary, 4 months ago, in reply to /34
- @NetBUG:@0xd34df00d Фак, нет же.
Скорее, делать такой const только там, где надо.from qutIM, 4 months ago, in reply to /35 - @NetBUG:@0xd34df00d Не надо, а можно.
А надо, имхо, только там, где структура с данными живёт больше одного экрана. Т.е. где реально не отследить, кто что с ней делает вместо того, чтобы читать.from qutIM, 4 months ago, in reply to /37 - @0xd34df00d:@NetBUG Я предпочитаю положиться на компилятор лишний раз, а не на свои глаза и память.from Azoth_primary, 4 months ago, in reply to /38
- @NetBUG:@0xd34df00d И этот человек сутки назад писал, что правильный и нужный работающий код (читай — с разумным соотношением сферичности и костылей) лучше, чем просто сферически-прекрасный..from qutIM, 4 months ago, in reply to /39
- @NetBUG:@nib952051 Я относительно постов после /34, так что не толсто.
Проблема-то понятна, но красивого решения нет. Так же, как для смартпоинтеров.from qutIM, 4 months ago, in reply to /41 - @NetBUG:@0xd34df00d А в них — целесообразность везде делать то, что ты хочешь, или же только там, где мы сформированную тяжким трудом структуру данных куда-то вдаль передаём и обоснованно боимся, что мы её прохерим.
Иначе говоря — если ты строишь хеш пользователей только для того, чтобы загрузить их аватарки, то без "законстанчивания" вполне можно обойтись.from qutIM, 4 months ago, in reply to /43 - @lockie:Слоубамп. std::map<rawr> map; const std::map<rawr> newmap = map; не?from ХОЛОДИЛЬНИКА, 4 months ago