Здравствуйте, _vanger_, Вы писали:
__>Ух ты! А почему, когда длины строк равны, они интерпретируются как string, а если различны, как char*?
в первом вызове аргументы char[6] и char[6]
во втором вызове аргументы char[6] и char[7]
Во втором случае вызывается не шаблонная функция т.к. типы char[6] и char[7] разные
Здравствуйте, netch80, Вы писали:
N>Звучит как тяжёлая недоработка конкретных рантаймов. N>Потому что если он упирается в жёсткий предел памяти, он обязан вызвать полный GC. Но желательно делать инкрементальный и раньше. N>Мне в этом смысле особенно нравится, как сделано в Lua. По умолчанию — превысили двойной размер после прошлой сборки — запускаем новую. Тяжёлого разрастания без причин там в итоге не бывает, есть чёткое представление, на сколько делать запас. N>В ранних Java, да, было с этим хуже, там обычно пока операционка не скажет "фиг тебе, а не страничка", не собиралось. Но и то исправили достаточно давно.
N>Я вначале подумал, что вы про случай, когда на какое-то уже ненужное дерево объектов висит забытая ссылка из одного из тех, что должны сейчас жить. Такие вещи, да, диагностируются тяжело, если нет возможности у системы спросить и проитерировать множество вообще всех объектов. N>Не знаю про типовые реализации JS, но в дотнете, вроде бы, такое есть везде?
Бегло почитал, вроде сейчас GC поумнели и циклические ссылки всегда разруливаются, в JS было по таймеру создание разных объектов ссылающихся друг на друга и на DOM, а в C# на каждое подключение, и плюс там еще с замыканием что то было, давно это было подробностей не помню, GC точно вызывался и отрабатывал, но он не мог убрать эти объекты, искать было трудней чем в С++.
I>>rapidjson, boost, qt5, xerces, xalan, xsec, sqlite, odb, openssl, curl, protobuf, ncreport, zlib, soci, librsync
N>Полный список не знаю, и не могу сказать, кто из них на самом деле покемон, но в пределах моих знаний тут нет проприетарных либ всяких тематических коннекторов, в которых больше всего подобных граблей (на OCI, кажется, только ленивый не ругался).
Это Oracle C++ Call Interface? Хм, не было у нас с ним проблем, правда и запросы были простые, с libpqxx тоже проблем нет, с MySql только через Qt работал, тоже ничего не текло.
Здравствуйте, _vanger_, Вы писали:
R>>У меня в этом плане любимая вот эта, что выведет программа:
R>>https://ideone.com/w3ZXdB
__>Ух ты! А почему, когда длины строк равны, они интерпретируются как string, а если различны, как char*?
Здравствуйте, _vanger_, Вы писали:
__>Ух ты! А почему, когда длины строк равны, они интерпретируются как string, а если различны, как char*?
Строковые литералы имеют тип массивов. А это значит, что литералы разной длины имеют разный тип. Такой вот ускользающий от внимания факт. И фокус в том, что во втором варианте используются неконстантные указатели. Поэтому шаблонный вариант дает лучшее соответствие типов формальных и фактических параметнов, но подходит он только для литералов одинакового типа, то есть, одинаковой длины. Но если мы добавим еще одну перегрузку с константыми указателями, то в обоих случаях будет использоваться только она, как дающая наилучшее соответствие формальных и фактических параметров:
Здравствуйте, netch80, Вы писали:
N>Но понять-то меня вполне можете? Не обязательно же принимать только то, что прочувствовал на собственной шкуре.
Ну если я с вами не согласен в некоторых аспектах, то это не значит, что я не могу вас понять
Здравствуйте, bc_kaya, Вы писали:
_>Хотел бы поинтересоваться у знающих людей, за что весь мир недолюбливает плюсы. _>Поделитесь впечатлением и опытом программирования с использованием языка С++?
C++ — язык сложный, не все могут его осилить. Собственно, никто не знает C++. Однажды создателя спросили, на сколько он оценивает свои знания С++ по десятибалльной шкале. Страуструп ответил, что 7 или менее. Люди с завышенным самолюбием не могут осилить С++. (Да, они тоже не могут). Поэтому люди с завышенным самолюбием недолюбливают плюсы, но они — не весь мир. Некоторые настоящие программисты годами изучали этот язык, писали примеры, экспериментировали с языком, даже писали компиляторы С++. И вот, когда казалось, что всё уже изучено и достигнуто, был принят новый стандарт. А потом ещё один и ещё один. И ещё один стандарт на подходе. Язык изменился. Трижды изменилась парадигма языка, но идеал не достигнут. С++ нет сборки мусора, поэтому его не любят грязнули. В С++ нет менеджера указателей, поэтому его не любят менеджеры. В С++ есть шаблонные и абстрактные типы, поэтому ассемблерщики и С-шники не любят С++ (они не понимают зачем всё это нужно). Конечно, в С++ можно отстрелить себе ногу, но мы же не дети, чтобы сидеть в песочнице.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, bc_kaya, Вы писали:
_>>за что весь мир недолюбливает плюсы.
С>Image: rGNam.jpg
С>PS: Минусующим правда глаза колет
Здравствуйте, rg45, Вы писали:
R>P.S. При этом заметь, я не иду в атаку с криками "Долой C#!" и "Java — отстой!". Повторюсь: в каждом инструменте есть свои слабые и сильные стороны и нужно просто уметь их исполльзовать.
Можно я за тебя?
C# — отстой!
Java — отстой!
Даже вот kotlin, он вкусненький, если после Java, но тоже — отстой
Здравствуйте, netch80, Вы писали:
K>>Си я даже не рассматриваю как язык высокоуровневой разработки. Мне кажется, он безнадёжно устарел даже на низком уровне, где сейчас почти всегда практичнее взять хотя бы тот же C++, не говоря о Rust и т.п. Про покойника или хорошо, или ничего.
N>C++ для низкого уровня часто годится только в очень специфическом варианте "без исключений, без RTTI". После этого C может быть и легче использовать.
Нормально на плюсиках под STM32 пишу. RTTI — оно просто не нужно, всё обычно статически создаётся, или автоматические переменные. Но без плюсиков я бы повесился.
И да, немалая часть того же кода работает в прогах на нормальном компе. Это тупо удобно, когда один и тот же код работает и на контроллере, и на компе, и ошибки быстрее выявляются