如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗? [关闭]
Posted
技术标签:
【中文标题】如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗? [关闭]【英文标题】:Can a programming language still be called "typed" if it have data types but does not have operator overloading? [closed] 【发布时间】: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 @ as unsigned char
相加,结果为0
。
【参考方案1】:
当然。键入与每个具有与其关联的特定类型(int、float、string)的值有关。它与可以对这些值使用哪些操作无关。
【讨论】:
嗯,如果我没看错Wikipedia,一组有效的操作是类型的重要属性。 确实,类型的定义应该包括该类型可用的操作。但是,操作本身并不影响语言是否是“类型化”的。 很高兴在答案中看到此声明的证明链接。【参考方案2】:简短回答:是的
更长的答案:类型化语言允许您指定变量基于其类型的值域。
运算符重载可能需要类型化语言,但不是类型化语言定义的一部分。
因此,如果它具有基于类型的运算符重载,则它是一种类型化语言,但如果它没有运算符重载,它仍然可能是一种类型化语言。
【讨论】:
以上是关于如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章