«слабо типизированный» - довольно субъективный термин. Я предпочитаю термины «строго типизированных» и «статически типизированных» против «слабо типизированным» и «динамически типизированный»,, потому что они являются более объективными и более точные слова.
Из того, что я могу сказать, люди обычно используют «слабо типизированный» как уменьшительно-уничижительный термин, что означает «мне не нравится понятие типов на этом языке». Это своего рода аргумент ad hominem (вернее, argumentum ad linguam) для тех, кто не может воспитывать профессиональные или технические аргументы против определенного языка.
Термин «строго типизированный» также имеет несколько разные интерпретации; общепринятое значение, по моему опыту, заключается в том, что «компилятор генерирует ошибки, если типы не совпадают». Другая интерпретация заключается в том, что «нет или несколько неявных преобразований». Исходя из этого, C++ действительно может считаться строго типизированным языком, и чаще всего он рассматривается как таковой. Я бы сказал, что общий консенсус по C++ заключается в том, что он является строго типизированным языком.
Конечно, мы могли бы попробовать более тонкий подход к вопросу и сказать, что части языка строго типизированы (это большинство случаев), другие части слабо типизированы (несколько неявных преобразований, например, арифметические преобразования и четыре типа явного преобразования).
Кроме того, есть некоторые программисты, особенно новички, которые не знакомы с более чем несколькими языками, которые не намерены или не могут проводить различие между «строгими» и «статическими», «свободными» и «динамический», и объединяют две - в противном случае ортогональные - концепции, основанные на их ограниченном опыте (как правило, соотношение динамизма и свободной печати на популярных языках сценариев, например).
В действительности, части C++ (виртуальные вызовы) налагают требование, чтобы система типов была частично динамической, но другие вещи в стандарте требуют, чтобы она была строгой. Опять же, это не проблема, так как это ортогональные понятия.
Подводя итог: возможно, язык не подходит полностью, совершенно в одну категорию или другую, но мы можем сказать, какое особое свойство данного языка доминирует. В C++ строго определенность доминирует.
Если вы когда-либо программировали в Haskell, вы узнаете, как C++ действительно слабо типизирован! ;-) – Claudix
C++ не слабо типизирован, но вы можете подорвать систему типов, если хотите. Поэтому можно утверждать, что он не полностью строго типизирован. – juanchopanza
.. и если он позволяет вам (тип punning сложный) –