任何人都可以解释有关动态类型或静态类型语言的C C ++ Java。
我在某处读到C C ++和Java都是静态语言。但我记得还有其他意见。很困惑。
谢谢!
答案 0 :(得分:6)
还有什么其他意见?毫无疑问,C,C ++和Java都是静态类型语言,C ++和Java具有一些动态类型的特性。还有另一个问题:强类型与弱类型,主要与隐式转换和重载有关。网上有很多关于这些问题的深入讨论;您可能希望从http://en.wikipedia.org/wiki/Type_system
开始答案 1 :(得分:1)
这是一个频谱。 C没有任何动态类型功能,虽然它允许你使用void *
和强制转换来自己做一些技巧。 C ++和Java在类方法上有动态调度,因此在C ++和Java中有些情况下,您不知道在运行时直到对象实际调用哪个方法。 Java包含一个反射API,它实际上允许您在运行时检查和修改类型,因此它比C ++更具动态性。然后有像Python和Ruby这样的语言几乎完全是动态的 - 在编译时几乎没有任何东西被检查,并且你有像“鸭子打字”这样的功能,你不关心实际的类型,只要它支持你关心的操作。
答案 2 :(得分:1)
在hlovdal回答之后,我会再次引用本杰明·皮尔斯的问题。我参考并扩展了他的“类型和编程语言”的第1章。
Java是安全语言(即阻止运行时类型错误),主要是静态类型检查。但是,由于继承(更准确地说,是子类型),变量的类型可以比指向值的类型更通用。 此外,该语言还允许验证对象是否具有某种类型,以及在运行时向下转换对象 - 在此类操作期间,在运行时检查类型。因此,每个对象都有一个指向其类型的运行时表示的指针。
C是一种静态类型检查的不安全语言。运行时不存在类型。 C ++仍然是一种使用静态类型检查的不安全语言,但它也为满足某些条件的类提供了有限的运行时类型识别 - 即具有一些虚拟方法(如Java中的所有对象)。
编辑 :“静态输入”是不一个明确定义的概念。为了表明这一点,我将(松散地)定义三个可能与“静态类型”相关的属性。
如果你说一个语言是“静态类型”的话,如果它具有我上面提到的所有三个属性,那么Java,C和C ++都不是静态类型的。
答案 3 :(得分:0)
关于静态/强类型的不同意见我刚刚在阅读完这个问题之后偶然发现了old slashdot comment:
我最喜欢的定义是“强壮 打字“来自Shriram Krishnamurthi的Programming Languages: Application and Interpretation(第205页):
那么什么是“强打字”?尽我们所知,这是毫无意义的 短语,人们经常在一个地方使用它 荒谬的时尚。
Benjamin Pierce(类型和作者的作者) 编程语言)写了一些东西 类似(见Mark Jason Dominus quoting Pierce on "__ typing"):
我花了几周时间,大约一年前,试图解决这个问题 术语“强类型” “静态打字”,“安全”等等 发现它非常困难。身为你的 消息指出,这些的用法 术语是如此多样化以呈现它们 几乎没用。