我在=
中看到以下关于赋值运算符C
的说法。
赋值运算符中包含隐藏的多态类型:
强制多态性-当我们在类型之间进行隐式强制时。
参数多态性-考虑为PL中的每种类型(原子的和用户用
struct
和enum
定义的赋值运算符)。
我确实了解关于Coercion
的第一句话,但是我不明白赋值运算符为什么以及如何支持参数多态。我可以举个例子来阐明这一说法吗?
修改:这是一本书PLS的概念(写在不同的语言)的。说,它具有强制多态性与隐性强制看起来像:
int number = 4.5;
// number = 4
所以说C
不具有多态性是不正确的。
顺便说一下,重载也是多态的,(当然)在C
中也是可能的。
答案 0 :(得分:0)
与技术和科学术语通常一样,术语“多态”和“多态”的使用和解释也有所不同。当人们说C不支持多态性时,他们最有可能表示它不支持 subtype 多态性,因为那些喜欢更广泛地使用通用术语的人可能会称之为C。与您的主张相反,它也不支持 adhoc 多态性,也就是重载。
即使我们接受类型强制作为一种多态形式(这不是主流观点),但在声称C不支持其多态性的主张下,您也已经建立了一个稻草人。这很容易激怒,而不是让人纵容。我敢说,如果您实际上是在寻找答案而不是试图吵架,那不是明智的策略。
至于你显而易见的问题,但是,
我确实了解关于Coercion的第一句话,但是我不明白赋值运算符为何以及如何支持参数多态。我可以举个例子来阐明这一说法吗?
我认为文本的意思是=
运算符由其左侧操作数的类型参数化,因为该运算符的行为在某种意义上取决于该类型。具体来说,将右侧操作数转换为左侧操作数的类型,并且赋值的细节也可以解释为随该类型而变化。
但我觉得半信半疑地表征为参数多态性。参数多态的标志通常是一个显式参数的某个地方。人们在谈论C ++中的参数多态性时通常会谈论模板,而C没有模板。尽管如此,在generic selection中,C11可以被认为具有有限形式的参数多态性。