Потому, что вместо узкоспециализированного кода пишется универсальный. Пишется какой-нибудь класс и в нём десяток методов нужных только потенциально. Используются более универсальные алгоритмы (тот же STL, вместо контейнера написанного под данную задачу на C). Всё это требует в разы больше памяти и кода. Это не плохо, с другой стороны, ибо оставляет возможность для развития в будущем. Про шаблоны (и STL) отдельно надо сказать. Если другие языки имеют динамические типы данных, то в C++ всё статически. Нельзя написать универсальную функцию работающую с любыми типами данных. Делают шаблон. Но для каждого использования шаблона с новым типом данных генерируется новый код функции -- вот и раздувается код. Проблема даже выше, на уровне архитектуры. Архитектура тоже строится универсальной. Много ненужных прослоек на пустом месте, чёрт ногу сломит. Вместо того, чтоб напрямую в нужное API обратиться. Тоже сильно раздувает код. C++ даёт возможность и программисты её используют, одним словом. И у многих мышление такое, программирование ради программирования, нет чтоб написать в C-стиле, наделают десяток классов с запутанными связами между ними. Причём вместо современного C++ всё больше C++98 с классами. Хотя классы в больших проектах понятно зачем нужны, они насильно задают архитектуру сверху, иначе всё скатится к говнокоду.
[ZX]