如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗? [关闭]

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】:

简短回答:是的

更长的答案:类型化语言允许您指定变量基于其类型的值域。

运算符重载可能需要类型化语言,但不是类型化语言定义的一部分。

因此,如果它具有基于类型的运算符重载,则它是一种类型化语言,但如果它没有运算符重载,它仍然可能是一种类型化语言。

【讨论】:

以上是关于如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

运算符重载

方法重载

C#,多个 == 运算符重载,没有模棱两可的空值检查

重载运算符

是否可以重载本机数据类型的运算符?

C++学习摘要之七:运算符重载