Языковые функции уже упоминались (GC, рефлексия и т. Д.). Но есть еще одно важное отличие: библиотеки. Я знаю, что есть STL, Boost и все виды библиотек, но они не являются частью, все они чувствуют себя по-разному. Часто вы вынуждены использовать все виды C-API (например, многопоточность или сокеты, чтобы упомянуть две вещи). Теперь все евангелисты C ++ присоединятся и расскажут о какой-нибудь классной библиотеке OO-сокетов или OO-потоков, но они не являются частью STL. Они должны быть. Это почти 2009 год, и все сети и многопоточные. Это должно быть частью стандартной библиотеки.
Почему плохо использовать эти C-API? Потому что их трудно использовать в объектно-ориентированной программе. Попробуйте использовать Win32 CreateThread () с шаблоном слушателя (C # -users: читайте «делегаты»).
Для "приложения с расширенными возможностями", где производительность не имеет большого значения, я бы всегда использовал Java или C #. Если мне нужна грубая скорость (например, обработка сигналов или встроенные приложения), я бы предпочел использовать C вместо C ++.
Кстати: я давно использовал все четыре языка (C, C ++, Java, C #).