Список в конце поста написан Лавсаном 2 года назад. (2011-03-23 19:56:00) (источник)
Надеюсь, автор не подаст жалобу в Роспатент за перепечатку :-)
Кстати, sudo cast  
lovesan.
Чтобы проверить актуальность вопроса, всю последнюю неделю я долго и нудно использовал этот список в дискуссиях. Чтобы разобрать отдельные пункты отдельно.
Временное резюме: С++ всё еще актуален по историческим причинам. Еще есть мобилки (sudo cast  
mono), гиперкластеры для шиндовс 3.11 (sudo cast  
vromanov) и базы данных. Т.к. он актуален, но не предназначен ни для чего (см. выводы в конце списка) новых специалистов по нему должно быть мало. Маленькая конкуренция на огромной области применения — огромное лавэ $$$. Вот это и есть истинная причина использовать кресты — возможность срубить €€€.
Честно говоря, «хитрый план» мне уже очень надоел, поэтому пора открыть карты.
Заодним, крестопоклонники смогут выйти на последний и решительный бой, т.к. сегодня пятница и вечером будет время пообщаться. Поклонникам мамкиного борща тоже наверняка есть что добавить, конструктивно и аргументированно.
Вот этот список:
-  Вырвиглазный синтаксис и контекстно-зависимая грамматика
  
- медленная компиляция
 - частые «internal error» в компиляторах
 - код плохо читается и его сложно поддерживать
 - разбор кода различными инструментами, вроде IDE, и его генерация - сильно затруднены
 
 -  ручное управление памятью
  
- неудобства при работе с динамической памятью
 - утечки памяти
 - висячие ссылки
 - сегфолты
 - стандартные средства, как то malloc/new, работают медленно
 - фрагментация кучи
 -  велосипедные аллокаторы на каждом шагу
      
- которые далеко не факт что эффективнее malloc/new
 
 -  велосипедные счетчики ссылок на каждом шагу, опять же
      
- медленная работа
 - перерасход по памяти
 
 - отладка затруднена
 - написание GC, по факту, невозможно, отчасти из-за (5), (7) и (8)
 
 - Никакого ABI
 - Нестандартизированный и непредсказумый name mangling
 -  Дублирование функционала Си
  
-  сами фичи из Си никуда не деваются при этом
      
- отчасти из-за того, что по функционалу превосходят аналоги из C++
 
 - запутывает новичков
 - malloc - new/new[], free - delete/delete[]
 - препроцессор - шаблоны
 -  указатели - ссылки
      
- ссылка не может быть NULL, что способствует появлению висячих ссылок и сегфолтов
 
 - структуры - классы
 - stdio - iostream
 
 -  сами фичи из Си никуда не деваются при этом
      
 -  Стандартная библиотека убога
  
- Отсутствует даже такой функционал, как вменяемая работа со строками и многомерные массивы
      
- Юникод?
 
 
 - Отсутствует даже такой функционал, как вменяемая работа со строками и многомерные массивы
      
 -  Слабая типизация
  
- способствует ошибкам
 - затрудняет отладку
 - const не дает абсолютно никаких гарантий
 -  при этом система типов невероятно переусложенена
      
- в основном из-за пунктов (2), (5) и (9)
 - медленная компиляция
 - частые внутренние ошибки в компиляторах
 
 
 -  объектая система убога
  
-  практически никакой интроспекции
      
- отладка затруднена
 
 -  передача объектов по значению
      
- понятие идентичности объекта теряет смысл
 - добавляет сложностей в управлении памятью
 - добавляет сложностей при отладке
 -  используется часто, по причине (2) 
          
- перерасход по памяти
 - медленная работа
 
 
 -  множественное наследование неудобно в использовании
      
- проблема ромба по дефолту не разрешается никак
 
 -  исключения в конструкторах гарантированно влекут утечку памяти
      
-  исключения в деструкторах тоже, и просто утечку - еще в лучшем случае
          
-  коды ошибок деструкторы и конструкторы возвращать не могут
              
-  ошибки в них не обработать никак
                 
-  поэтому ими стараются не пользоваться
                     
- раздувание кода
 
 
 -  поэтому ими стараются не пользоваться
                     
 
 -  ошибки в них не обработать никак
                 
 
 -  коды ошибок деструкторы и конструкторы возвращать не могут
              
 
 -  исключения в деструкторах тоже, и просто утечку - еще в лучшем случае
          
 -  деструктор можно вызывать до выхода из блока кода, или до delete
      
- гарантированная утечка ресурсов/сегфлот
 - это не предотвратить никак, деструктор обязан быть public
 
 -  одиночная диспетчеризация
      
- виртуальные методы в конструкторах не работают
 -  реализована убого
          
- pure virtual function call
 - сложности в случае с множественным наследованием
 -  деструкторы обязаны быть виртуальными
              
- по дефолту - не виртуальные
 
 - никаких интерфейсов, только классы
 
 
 - порядок инициализации статических членов классов не определен
 -  private, public и protected не дают никаких гарантий сокрытия данных
      
- к инкапсуляции же не относятся совершенно никак
 
 -  отсутствие «свойств»
      
-  вынуждает городить getter'ы и setter'ы
          
- раздувание кода
 - размывание интерфейса класса
 
 
 -  вынуждает городить getter'ы и setter'ы
          
 - неявно генерирумые конструкторы, деструкторы и операторы присваивания
 - «friend» нарушают инкапсуляцию
 
 -  практически никакой интроспекции
      
 -  шаблоны
  
- очень сильно замедляют компиляцию
 - раздувание кода
 - обфускация кода
 - результат раскрытия плохо предсказуем
 -  сложности в отладке
      
- километровые и плохо читаемые сообщения об ошибках при компиляции
 
 -  нарушают инкапсуляцию
      
- обязаны содержать реализацию в заголовочных файлах
 
 - позволяют генерировать некорректный код
 
 -  исключения
  
-  отсутствие finally/unwind-protect
      
-  заставляет городить классы ради одних деструкторов
          
- раздувание кода
 - медленная компиляция
 - медленная работа
 
 
 -  заставляет городить классы ради одних деструкторов
          
 -  конфликтуют с другими возможностями языка
      
- конструкторы/деструкторы
 - ручное управление памятью
 
 - работают медленно
 - малофункциональны (ср. CL condition system)
 
 -  отсутствие finally/unwind-protect
      
 
По причинам 3, 4, 5, 9 и 10 C++ совершенно неприменим для системного и низкоуровневого программирования. А по причинами 1, 2, 5, 6, 7, 8, и, опять же, 9 и 10 - и для прикладного.
У C++ нет области применения.








