gpt4 book ai didi

c - C 中的多态性和赋值运算符

转载 作者:行者123 更新时间:2023-11-30 19:28:11 25 4
gpt4 key购买 nike

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

There are hidden polymorphism types in the assignment operator:

  1. Coercion polymorphism - when we do implicit coercion between types.

  2. Parametric polymorphism - Consider that the assignment operator is defined for each type in the PL (atomic and for user-defined with struct and enum).

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

编辑:这是一本关于 PL 概念的书(用不同的语言编写)。通过说它具有隐式强制的强制多态性,看起来像:

int number = 4.5;
// number = 4

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

最佳答案

与技术和科学术语的情况一样,术语“多态性”和“多态性”的使用和解释存在一些多样性。当人们说 C 不支持多态性时,他们很可能是指它不支持子类型多态性,正如那些喜欢更广泛地使用通用术语的人可能会这样调用它。与您的断言相反,它也不支持临时多态性,即重载。

即使我们接受类型强制作为多态性的一种形式——这不是主流立场——在脱离其适当的上下文而认为 C 不支持多态性的情况下,你已经设置了一个稻草人。这更有可能激怒而不是讨好,而且我敢说,如果你实际上是在寻找答案而不是试图引发争论,那么这不是一个明智的策略。

但是,至于你明显的问题,

I do understand the first saying about Coercion, but I don't understand why and how the assignment operator supports parametric polymorphism. Can I have an example which clarifies that statement?

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

但我发现将其描述为参数多态性是可疑的。参数多态性的标志通常是某处的显式参数。当人们提到 C++ 中的参数多态性时,通常会谈论模板,而 C 没有模板。尽管如此,在 generic selection 中,C11 可以被认为具有有限形式的参数多态性。 .

关于c - C 中的多态性和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com