【问题标题】: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

标签: c types compiler-construction programming-languages terminology


【解决方案1】:

当然。键入与每个具有与其关联的特定类型(int、float、string)的值有关。它与可以对这些值使用哪些操作无关。

【讨论】:

  • 嗯,如果我没看错Wikipedia,一组有效的操作是类型的重要属性。
  • 确实,类型的定义应该包括该类型可用的操作。但是,操作本身并不影响语言是否是“类型化”的。
  • 很高兴在答案中看到此声明的证明链接。
【解决方案2】:

简短回答:是的

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多