Как часто бывает с техническими и научными терминами, существует некоторое разнообразие в использовании и толковании терминов «полиморфный» и «полиморфизм».Когда люди говорят, что C не поддерживает полиморфизм, они, скорее всего, имеют в виду, что он не поддерживает полиморфизм subtype , как его могут назвать те, кто любит более широко использовать общий термин.Вопреки вашему утверждению, он также не поддерживает ad hoc полиморфизм, то есть перегрузку.
Даже если мы принимаем принуждение типов как форму полиморфизма - что не является основной позицией -принимая заявление о том, что C не поддерживает полиморфизм вне его надлежащего контекста, вы создали соломенного человека.Скорее это раздражает, чем заискивает, и, полагаю, это была не мудрая стратегия, если вы на самом деле ищете ответ, а не пытаетесь начать спор.
Что касается вашего очевидного вопроса,однако,
Я понимаю первое высказывание о Принуждении, но я не понимаю, почему и как оператор присваивания поддерживает параметрический полиморфизм.Могу ли я привести пример, поясняющий это утверждение?
Полагаю, текст означает, что оператор =
параметризован типом его левого операнда, поскольку поведение этого оператора меняется,в некотором смысле, в зависимости от этого типа.В частности, правый операнд преобразуется в тип левого операнда, и специфика присваивания может интерпретироваться также в зависимости от этого типа.
Но я считаю сомнительным характеризовать этокак параметрический полиморфизм.Отличительной чертой параметрического полиморфизма обычно является где-то явный параметр .Шаблоны - это то, о чем обычно говорят люди, когда ссылаются на параметрический полиморфизм в C ++, а в C нет шаблонов.Тем не менее, можно считать, что C11 имеет ограниченную форму параметрического полиморфизма при обобщенном выборе .