我们可以说“C语言运算符是多态的”吗? 例如,如果在组装时我们可以说“C语言运算符是多态的”吗?
int a, b;
float p, q;
a+b;
a+p;
p+q;
等会产生不同的代码,作为类型转换所需的浮点协处理器指令需要被执行以使转化率和浮点加法。所以操作员根据他们所作用的对象的不同而不同。
虽然这些都是隐含的,所以如果这在理论上可以称为静态多态,那么运算符重载?
我们可以说“C语言运算符是多态的”吗? 例如,如果在组装时我们可以说“C语言运算符是多态的”吗?
int a, b;
float p, q;
a+b;
a+p;
p+q;
等会产生不同的代码,作为类型转换所需的浮点协处理器指令需要被执行以使转化率和浮点加法。所以操作员根据他们所作用的对象的不同而不同。
虽然这些都是隐含的,所以如果这在理论上可以称为静态多态,那么运算符重载?
如果我们考虑到运营商+
的功能,那么它的多态函数的定义相匹配,因为它可以“评估或可适用于不同类型的值”。所以是的,这是一个polymorphic函数。
是的,理论上这可以称为静态多态或操作符重载。但是由于多态性在语言定义的适用范围内是固定的,所以它不是一个非常有趣的多态。
为什么不能? – 2011-06-04 09:52:47
我相信我们*可以说* C(或其他类似语言)中的运算符是多态的,想知道他们实际上被考虑的是什么。因为多态性是隐式演示的,并且不允许用户编程。 – phoxis 2011-06-04 10:00:18
我同意。但是,大多数情况下,多态只有在可以添加到它时才会非常有用,就像在C++中可以重载操作符(和函数)一样。在C中,实现动态多态以及大量的宏hackery(可能还有一个自定义的预处理器)来实现任何形式的程序员定义的静态多态性需要花费很多精力。 – 2011-06-04 10:11:12