|
|
Результаты опроса: Почему вы избегаете использовать С++11 ? | |||
еще не дошел до изучения. | 23 | 37.10% | |
а зачем мне оно? | 13 | 20.97% | |
мой компилятор не поддерживает. | 18 | 29.03% | |
а что это? оО | 11 | 17.74% | |
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 62. Вы ещё не голосовали в этом опросе |
|
Рейтинг 4.96/74: |
1 | |
Почему вы избегаете использовать возможности С++11 ?13.01.2012, 12:08. Показов 13530. Ответов 123
Метки нет (Все метки)
всем привет.
сабж. я-то, в полную использую. везде где только могу. но частенько вижу вопросы типа: "а без использования С++0х нельзя?" любопытна аргументация. благодарен.
0
|
13.01.2012, 12:08 | |
Ответы с готовыми решениями:
123
Отключение возможности использовать Flash накопители Создать команду, расширяющую функциональные возможности системы Unix. Использовать конв Разработать многопоточное приложение. Использовать возможности, предоставляемые пакетом java.util.concurrent Почему при Process.Start не открывает спец возможности |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
24.07.2016, 11:31 | 61 |
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
24.07.2016, 11:45 | 62 |
hoggy, если в этом есть обоснованная необходимость безусловно необходимо применять все доступные в языке новшества для решения задачи. Мне такие чудные задачи видимо не попадались. И мне почему-то кажется что таких задач на самом деле нет)
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
24.07.2016, 11:50 | 63 |
все нововведения в стандарт языка (в core-language, а так же - в стандартную библиотеку)
были продиктованы необходимостью. и потом, простота, удобства, и принципиально новые возможности, это не каприз программистов. это - прямая выгода для компаний, выраженная сокращением времени на разработку, снижением затрат на сопровождение и ускорение разработки за счет более удобных, и простых средств языка.
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
24.07.2016, 12:05 | 64 |
hoggy, знаете, даже в C98 "въезжают" в достаточном объёме ограниченное число разработчиков, а стандарты выше него привносят в язык настолько инопланетные конструкции, что его в целом наверное не понимают даже в комитете (ситуация схожая с состоянием дел в физике частиц - все понимают ядерные реакции, но все эти кварки... струны... и прочая "кислота" - её понимает лишь пара человек - остальные смотрят на них как на идиотов) - и вы говорите что была привнесена простота и легкость понимания и сопровождения? Хм. По мне - так это выглядит как игры разума Эйнштейнов которые там гибкость мозгов тренируют - яснее вещи которые и так были ясными яснее не стали. ИМХО: две ложки здравого смысла, две бочки мозговых пируэтов (можно посмотреть как на балет, но сложнее - повторить) и два вагона маркетинга.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
24.07.2016, 12:15 | 65 |
нет. не знаю.
я понимаю, Москва не сразу строилась. и что б стать миддлом, нужно сначала пройти этап джуна. однако, однажды джун научится. и я не знаю ни одного миддла, который не умел бы с++11 в достаточном объёме. не говоря уже о прошлых стандартах. не знаю ни одной такой конструкции. приведите пример. на практике я вижу лишь, с++1y привнес новшества, которые упростили во многом синтаксические конструкции. например: auto, decltype, вариадики, rvalue-reference - значительно упростили метапрограммирование, и позволили колоссально сократить объемы кода. я уже молчу про то, что сегодня стало возможным создание таких механизмов, которые раньше были в принципе не возможны.
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
24.07.2016, 13:15 | 66 |
hoggy
Приятно слышать что в этом мире есть люди понимающие C++ Удивительно слышать что эти люди считают что их знание абсолютно Относительно примеров - к сожалению я не практикую сравнительный анализ стандартов поэтому могу лишь "выкрикивать с места" различные реплики которые и так должны быть известны и приняты к сведению всеми кто знакомился с 11-м. Из того что приходило мне в голову когда я пробегал глазами: лично для меня ценность такого приобретения как auto спорна - человек должен знать что он объявляет, а не просить "эй ну объяви ну как там её ну эту ну ты сам знаешь". Это ОЧЕНЬ коротко с этим не поспоришь, но что-то меня в этом тревожит. Знаете, так и снятся кошмары, что я объявляю итератор, а его тип не совпадает с ожидаемым (то есть я думаю там скажем rec_type , а там rec_type_2 и у них обоих одноименные поля и я не догадываюсь что работаю не совсем с тем с чем думаю). Фобия)
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
24.07.2016, 13:40 | 67 |
времени написания кода, программист в любом случае знает что он там объявляет.
при чтении кода в подавляющем большинстве случаев знать фактические типы объектов не нужно. я бы сказал - только отвлекает. почему бы и нет? очень удобный подход. хз, чего тут можно бояться. в случае каких то изменений оно и так, и сяк покажет ошибки компиляции. которые будут устранены за несколько минут. ну или не покажет вовсе, но опять таки - случится может в обоих случаях с одинаковым успехом.
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
24.07.2016, 13:45 | 68 |
да, очевидность этого я признаю
ну да, и ошибки у нас не смотря на то что сборка прошла успешно появляются просто потому что нам так захотелось
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
24.07.2016, 13:50 | 69 |
ошибки были, есть и будут.
но есть хорошая новость: чем проще код, и чем его меньше, и чем удобнее инструмент, тем ниже вероятность их появления.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
24.07.2016, 14:15 | 70 | ||||||||||
Почти не встречал вещей, которые невозможно выразить в машинных кодах.
Только для этого и появляются новые языки программирования или новые версии существующих. Чтобы те же вещи можно было сделать быстрее/проще/более производительно. А иначе все до сих пор писали бы на "см. комментарий к предыдущей цитате". ИМХО это самое бесполезное, чем занимается комитет (и чем, к сожалению, он в основном и занимается, если судить по 17 стандарту) - перетаскивает буст в стандарт. Преступление - это попытка сохранить пресловутую обратную совместимость всеми правдами и неправдами. И по итогам этого преступления мы имеем (самый яркий пример, который первым приходит в голову) убогие И снова см. ответ 1. Любую задачу можно решить множеством разных способов. Можно писать в машинных кодах. Можно писать на асме. Можно В целом, согласен. Язык, по моему мнению, из стандарта в стандарт безбожно усложняют. Но в ворохе усложнений попадаются действительно интересные вещи, которые позволяют писать более простой (лямбды, foreach, variadic templates, автовывод типов), производительный (move-семантика, обязательный copy elision в 17 стандарте) и безопасный (смарт-поинтеры и соотвествующие make-функции, final/override) код. Странное предположение. Указание типа - мета-информация для программиста. Компилятору оно не нужно, он и так знает, какой тип должен быть в объявлении слева, на основании выражения справа. Мне
Ну что ж, как известно, всё новое и неизвестное сначала пугает. Но вы не бойтесь. Вас никто не заставляет писать auto везде и всегда. Да и не получится это, где-то тип должен быть объявлен явным образом и исчерпывающе. А auto поможет не стирать пальцы в кровь, объявляя его снова и снова, как я показал выше.
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
24.07.2016, 15:40 | 71 |
silent_1991, упрощение из упрощений - PHP - пишите на нем там даже auto не нужен) шутка. если у вас есть лишние 30 минут не могли бы вы кодом проиллюстрировать самые прекрасные нововведения? foreach мне понятно по аналогии. auto уже обсуждался, а остальное - что за заклинания?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
24.07.2016, 20:04 | 72 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Продемонстрирую то, что я перечислил. Приступим.
1. Лямбда-функции (замыкания). Предположим, нужно подсчитать количество элементов в векторе, удовлетворяющих заданному критерию (пусть это будут чётные числа). Раньше:
Просто обходим словарь и печатаем элементы в виде "key: value". Раньше:
Честно говоря, мне лень самому писать примеры, тем более, что простые примеры получатся синтетическими и, таким образом, довольно неубедительными. Вот статья, где показаны примеры использования таких шаблонов (правда, там они тоже синтетические, но там есть код). Стоит сказать, что раньше, до появления этого в стандарте, подобное по-человечески провернуть было буквально невозможно. Теперь, при наличии шаблонов с переменным числом параметров, появилась возможность, например, реализовать действительно типобезопасный форматный ввод-вывод (scanf/printf), или же благодаря этой возможности реализуются такие функции как std::make_shared и std::make_unique (см. ниже). 4. Move-семантика и rvalue-ссылки. Позволяет подсказать компилятору, как именно перемещать содержимое объекта в случае, когда полноценно копировать его нет необходимости. Например:
Кроме того, rvalue-ссылки позволили реализовать такую вещь как perfect forwarding, но это тема отдельного разговора. Если интересно, поищите в гугле по этому словосочетанию. 5. Smart pointers Не поверю, что вы о них не слышали) Сами умные указатели перетащили из буста (с некоторыми изменениями-улучшениями, насколько я знаю), но благодаря perfect forwarding и variadic templates можно полностью избежать явных вызовов оператора new (что, бесспорно, великолепно; сам умный указатель скрывает в себе вызов delete, а теперь код будет свободен ещё и от явных new; управление ресурсами становится всё проще). Т.е. если у нас есть класс Foo, имеющий такой конструктор:
6. final/override Тут всё просто, добавили возможность явно выразить намерение переопределить виртуальную функцию базового класса (ключевое слово overrdie) либо наоборот, запретить переопределять виртуальную функцию в производном классе или вообще наследовать от самого класса (ключевое слово final). Чем полезен overide? Тем, что он гарантирует, что будет функция будет именно переопределена, т.е. будет производиться проверка сигнатуры. Например:
А теперь так:
Чем полезем final? Например, как известно, классы стандартной библиотеки не помечают свои деструкторы виртуальными. Таким образом, наследовать от них небезопасно. Пока мы выделяем объекты на стеке - всё в порядке. Но как только мы начинаем выделять их в куче, а потом, например, пытаться работать с ними (в том числе, удалить их посредством оператора delete/delete[]) через указатель на базовый класс - начинаются проблемы. При попытке удаления память спокойно может утечь в неизвестном направлении. Будь возможность пометить такие классы как ненаследуемые - проблем бы не было. Теперь такая возможность имеется. Фух, всё это заняло отнюдь не 30 минут. Вообще, если вы попробуете отбросить скептицизм и даже, в какой-то степени, упрямство, советую почитать последнюю книгу Мейерса "Эффективный и современный C++". Там описаны все фишки 11 и 14 стандартов, и куда лучше, чем я их тут попытался объяснить. Всё подробно, аргументированно, почему так лучше, чем сяк, и с примерами.
2
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
24.07.2016, 20:17 | 73 | |||||
одна из киллер-фичь с++11 - благодаря вариадикам и r-value-reference
стала возможной оптимальная стратегия передачи аргументов. что было в принципе не возможно во времена с++03 только это нужно правильно уметь готовить:
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
24.07.2016, 20:37 | 74 |
hoggy, да, спасибо за поправку. Сам же про perfect forwarding написал - и сам же о нём благополучно забыл
0
|
Ушел с форума
|
|
24.07.2016, 22:57 | 75 |
лежат далеко за пределами языкового уровня. Упрощенно говоря, от всяких там полиморфных лямбд и улучшенных SFINAE мне не жарко, ни холодно; важна в первую очередь идея, т.е. некое инженерно-техническое решение, а язык - всего лишь инструмент, который позволяет воплотить эту идею в жизнь. Содержание преобладает над формой. Я и из C++98/03 использую далеко не все возможности, лишь самое необходимое и простое. Другая причина в том, что работа с новым C++ требует новых версий Visual Studio, а это означает отказ от Windows XP и, например, от "древних" процессоров, у которых нет поддержки определенных команд типа SSE2. Нет, я понимаю, что кроме MS C++ Compiler есть еще Clang, GCC, Intel, и даже иногда "балуюсь" на онлайн-компиляторах и почитываю всякие proposal, еще не включенные в стандарт, но на работе, в моих текущих реалиях, где все очень сильно завязано на стек технологий Microsoft и их инструментарий, на поддержку обратной совместимости, такие вещи или малополезны или вообще неприменимы. Как мне кажется, наибольшую выгоду от C++11 и выше получают разработчики всевозможных библиотек с шаблонами и метапрограммированием - Boost, STLSoft и т.п., а "прикладникам" хватает и того, что есть в C++98.
2
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
25.07.2016, 00:07 | 76 |
все старшие студии умеют тулчейн "сборка под xp".
можно спокойно применять все эти новомодные плюшки, и при этом собирать под xp а прикладники эти самые библиотеки используют. с этим самым "юзабельным" дизайном. да и в самом этом прикладном коде всякие auto/мувы/etc - удобно же. и много где хочется применять. ну да. как то же писали софт. и ничего, живые. вот только с позиции сегодняшнего дня, вспоминая c++03, я думаю: это ж сколько всяких геморняков приходилось преодолевать, которых сегодня либо нет вообще, либо разруливаются они элементарно.
0
|
Ушел с форума
|
|
25.07.2016, 09:19 | 77 |
hoggy, все не так просто.
Поддержка Windows XP в последних "Студиях" глючная. Есть проблемы с ATL, например: Visual Studio 2015 cannot produce an ATL Dll that successfully registers on Windows XP http://stackoverflow.com/quest... rs-on-wind Есть проблемы со сборкой Boost под Windows XP: Boost и XP Toolset У предыдущих версий Visual Studio также были проблемы, например с InitializeCriticalSectionEx. И т.д.
2
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
25.07.2016, 11:51 | 78 |
ну так, 2015 как бы ещё совсем новая считается.
хотя я не удивлюсь, если уже вышла поддержка для буста, например. на 2013 я с проблемами не сталкивался) там и буст собирается, и с ATL проблем никаких не встречал. только визард сломали) так что формошлепка под mfc теперь делается ручным приводом) редактор ресурсов испоганили... ещё где то по мелочи изгадили... ну а так все нормально ^_^
0
|
Ушел с форума
|
|
25.07.2016, 12:10 | 79 |
Под Windows XP? А не подскажешь рецептик, как это сделать?
(т.е. Boost + XP toolset на VS2013 или другой студии).
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
25.07.2016, 12:24 | 80 |
нет. не под xp
но если вам нужен патч для xp, то я могу попробовать для вас его приготовить. во всяком случае, есть опыт подсовывания своих собственных тулчейнов в тамошнюю сборку. но у меня нет возможности проверить решение. (xp только на работе. но на работе я такими вещами занимаццо не могу) а вообще, не совсем понятно, в чем у вас проблема. собирать под xp буст - эт примерно тоже самое, что собирать например из командной строки. прокидываем нужное окружение среды. там ещё дефайн какой то нужно посетить. для буста все аналогично.
0
|
25.07.2016, 12:24 | |
25.07.2016, 12:24 | |
Помогаю со студенческими работами здесь
80
Почему следует избегать явного приведения типов? (по возможности) Почему все рекомендуют для вёрстки меню использовать списки, если проще для этих целей использовать Программисты С++, почему вы не используете все возможности этого замечательного языка программирования?! Почему на одном ноуте в настройках архивирования нет возможности сохранить архив в сети? Ноутбук Асус Нет возможности разгона ОЗУ, а также в БИОС нет возможности отключения интегрированной графики Почему не могу использовать метод? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |