Другие языки программирования и технологии

Напишите достоинства и недостатки С++. Информация о С++ Достоинства и недостатки С++

из полезного массовому потребителю в этом языке только совместимость с C (вместе с довольно удобным синтаксисом статичных тайпкастов и возможностью использовать низкоуровневые сервисы операционной системы напрямую, поскольку подавляющее их большинство написано на C) и унифицированная под постфикс грамматика.
из недостатков:
* отсутствие сборщика мусора. если уничтожение объектов в куче ещё можно переложить на плечи умных указателей, то с возвратом по значению - горе горькое, бида и потеря потерь. возвраты по значению неминуемы, например, при перегрузе операторов и влекут за собой создание полноценных промежуточных объектов и необходимость в конструкторах копирования. есть вероятность, что возврат будет соптимизирован, если промежуточный объект будет анонимным, но нет гарантии, так что за про.. баный где-то конструктор копирования вы, скорее всего, дорого заплатите своим временем и нервами впоследствии.
* завязывание языка на текстовый препроцессор, управляемый совершенно другим языком. например, модульность в этом языке работает исключительно через препроцессор. отсюда же необходимость определять тела функций отдельно, отчего, в частности, следующее:
* c++ -это просто "много кода". на 1000 строк набирается едва ли стоня, реально что-то делающих. остальное - декларации. усугубляют дело такие ошибки в дизайне языка, как сокрытие методов при их перегрузке в дочерних классах и общая монструозность синтаксиса деклараций.
* невозможность компиляции шаблонов, как и поддержка только примитивных метаданных в объектных файлах вообще, драматично снижает скорость компиляции модулей.
* вездесущие неявные преобразования типов возводят количество неочевидных ошибок в квадрат.
* исключения в этом языке поддерживаются просто уё..ищно, их семантика противоречива и имеет неочевидные вырожденные случае чуть менее, чем всегда. конструкция finally не поддерживается. последнее обстоятельство окончательно заставляет программиста отказаться от использовать исключений в проекте, поскольку управление созданием и освобождением ресурсов в участках кода, подверженных возникновению исключений, становится архисложным и требующим скурпулёзности в подходе.
* куча неправильно устранённых ошибок в дизайне, читай "неоднозначностей в семантике", отчего порог вхождения в язык задирается ещё выше - все вырожденные случаи и подводные камни нужно тупо зубрить, как в том анекдоте: "запомнытэ это дэти, патамущта панят это невазможна".
* выбор базового набора возможностей языка содержит ошибки, их устранение зачастую притянуто на костылях и несёт побочные эффекты. программист вынужден строить функциональность, основываясь не на возможностях языка, а на побочных эффектах от их использования. в связи с этим типичный проект на c++ примерно на 80% состоит из кода, заставляющего язык делать через задницу то, что этот язык вообще-то не может.
достоинства интересны только гикам и эстетам:
* завязывание языка на типы. перегрузки функций
* перегрузки операторов; в c++ можно переопределять семантику почти всех операторов и служебных символов. с одной стороны, это как раз яркий пример того костыля, о котором я говорил в последнем пункте списка недостатков, но с другой стороны иногда они зело полезны.
* вывод типа в шаблонах - ня!
* пространства имён.
* ну ооп, куда ж без него.
* какое-никакое rtti.
но это всё для баловства, поскольку все вышеперечисленные достоинства введены по следующей причине: дизайнер языка прохавал тот факт, что зачастую объектная модель (модель предметной области) выглядит как некий язык, описывающий задачу в терминах самой задачи. но это же и самая крупная ошибка: ооп и яоп (моп) хоть и схожи, но совершенно несовместимы. сущности ооп никогда не эквивалентны сущностям из предметной области хотя бы даже частично, пытаться и отождествлять - грубейшая ошибка, так что реально нахер никому не нужны все эти свистелки и перделки, ими только играться.
Андрей Козлов
Андрей Козлов
9 617
Лучший ответ
Ну это как достоинства и недостатки мостов/домов описывать. Из недостатков могу отметить тупое присоединение хедеров препроцессором.
C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg.
Ершат Сабиров
Ершат Сабиров
2 926
Достоинств масса, удобно писать проги, язык очень гибкий, можно даже Операционку свою создать. На чём твоя фантазия ограничится. Минусы только в сложности изучения, но если понять смысл, то всё как по маслу пойдёт)