c - C中的多态性和赋值运算符
问题描述
我在 中看到以下关于赋值运算符=
的说法C
。
赋值运算符中有隐藏的多态类型:
强制多态性 - 当我们在类型之间进行隐式强制时。
参数多态性——考虑到赋值运算符是为 PL 中的每种类型定义的(原子类型和用户使用
struct
and定义的类型enum
)。
我确实理解关于 的第一句话Coercion
,但我不明白赋值运算符为什么以及如何支持参数多态性。我可以举一个例子来澄清这个说法吗?
编辑:这是一本关于 PL 概念的书(用不同的语言编写)。通过说它具有隐式强制的强制多态性看起来像:
int number = 4.5;
// number = 4
所以说C
没有多态性是不正确的。顺便说一下,重载也是多态性,而且(当然)在C
.
解决方案
与技术和科学术语的情况一样,术语“多态性”和“多态性”的使用和解释存在一些差异。当人们说 C 不支持多态性时,他们最有可能的意思是它不支持子类型多态性,因为那些喜欢更广泛地使用通用术语的人可能会这样称呼它。与您的断言相反,它也不支持临时多态性,即重载。
即使我们接受类型强制作为多态性的一种形式——这不是主流立场——在将 C 不支持多态性的说法脱离其适当的上下文时,你已经建立了一个稻草人。这更容易激怒而不是讨好,如果你实际上是在寻找答案而不是试图开始争论,我敢说这不是一个明智的策略。
然而,至于你明显的问题,
我确实理解关于强制的第一句话,但我不明白赋值运算符为什么以及如何支持参数多态性。我可以举一个例子来澄清这个说法吗?
我想文本意味着该=
运算符由其左侧操作数的类型参数化,因为该运算符的行为在某种意义上取决于该类型而有所不同。具体来说,右手操作数被转换为左手操作数的类型,并且赋值的细节也可以解释为随该类型而变化。
但我发现将其描述为参数多态性是可疑的。参数多态性的标志通常是某处的显式参数。模板是人们在提到 C++ 中的参数多态性时通常谈论的内容,而 C 没有模板。尽管如此,C11 可以被认为在泛型选择中具有有限形式的参数多态性。
推荐阅读
- github - 将现有的 lambda 函数从 AWS 复制到 Github
- android - Android studio 一种用法被过滤掉了
- django - 如何从不同的模型访问多对多字段数据?
- python - 部分字符串匹配python,如Vlookup
- javascript - 循环中的Jquery ajax并在成功函数中分配ID
- integration - SagePay 服务器直接集成在所有情况下都返回 201
- excel - 将单元格与 IF 语句与第三个结果进行比较
- python - 如何在matplotlib plot的xlabel中打印10K、20K....1M
- jenkins - 管道语法:附加到现有文件而不使用 sh ""
- java - 在java swing中隐藏所有活动的工具提示