【发布时间】:2019-09-16 23:44:24
【问题描述】:
如果我们有一种编程语言强制您为变量设置数据类型,例如:
int i;
float f;
但没有运算符重载,因此例如,不要使用 + 运算符将 int 添加到 int 或将 float 添加到 float,而是使用运算符将int 添加到int(例如:+),并使用不同的运算符将float 添加到float(例如:#+)。
请注意,这种编程语言仍然具有类型安全性,因此例如,如果您尝试使用#+ 运算符将float 添加到int,则会出现编译错误。
这样的编程语言还能称为“类型化”编程语言吗?
【问题讨论】:
-
为什么不呢?
-
如何在您的问题中定义“运算符重载”。例如,
unsigned char加法 (+) 可能产生与int加法不同的结果(考虑200 + 56,在int中你会得到256,但对于unsigned char,你会得到0)...这不是“运算符重载”吗? -
用无类型的语言你可以做到
i = 42; i = "foo"; i = -2.71828;...i没有类型 -
@sepp2k 如果编程语言强制你为变量设置数据类型,但没有运算符重载和类型安全,我们还能称这种语言为“类型化”编程语言吗? (我认为答案是否定的,因为即使我们用数据类型标记了每个变量,但我们并没有使用这种数据类型来实现运算符重载或强制类型安全,所以我们最好不要用任何数据类型标记变量) .
-
@Myst 在我的语言中,将有第三个运算符将
unsigned char添加到unsigned char(例如:$+),正如您所说,如果我们添加 @987654349 @ asunsigned char相加,结果为0。
标签: c types compiler-construction programming-languages terminology