多态性与C中的赋值运算符

时间:2019-02-02 18:40:59

标签: c polymorphism

我在=中看到以下关于赋值运算符C的说法。

  

赋值运算符中包含隐藏的多态类型:

     
      
  1. 强制多态性-当我们在类型之间进行隐式强制时。

  2.   
  3. 参数多态性-考虑为PL中的每种类型(原子的和用户用structenum定义的赋值运算符)。

  4.   

我确实了解关于Coercion的第一句话,但是我不明白赋值运算符为什么以及如何支持参数多态。我可以举个例子来阐明这一说法吗?

修改:这是一本书PLS的概念(写在不同的语言)的。说,它具有强制多态性与隐性强制看起来像:

int number = 4.5;
// number = 4

所以说C不具有多态性是不正确的。 顺便说一下,重载也是多​​态的,(当然)在C中也是可能的。

1 个答案:

答案 0 :(得分:0)

与技术和科学术语通常一样,术语“多态”和“多态”的使用和解释也有所不同。当人们说C不支持多态性时,他们最有可能表示它不支持 subtype 多态性,因为那些喜欢更广泛地使用通用术语的人可能会称之为C。与您的主张相反,它也不支持 adhoc 多态性,也就是重载。

即使我们接受类型强制作为一种多态形式(这不是主流观点),但在声称C不支持其多态性的主张下,您也已经建立了一个稻草人。这很容易激怒,而不是让人纵容。我敢说,如果您实际上是在寻找答案而不是试图吵架,那不是明智的策略。

至于你显而易见的问题,但是,

  

我确实了解关于Coercion的第一句话,但是我不明白赋值运算符为何以及如何支持参数多态。我可以举个例子来阐明这一说法吗?

我认为文本的意思是=运算符由其左侧操作数的类型参数化,因为该运算符的行为在某种意义上取决于该类型。具体来说,将右侧操作数转换为左侧操作数的类型,并且赋值的细节也可以解释为随该类型而变化。

但我觉得半信半疑地表征为参数多态性。参数多态的标志通常是一个显式参数的某个地方。人们在谈论C ++中的参数多态性时通常会谈论模板,而C没有模板。尽管如此,在generic selection中,C11可以被认为具有有限形式的参数多态性。