有人能解释C++;关于动态或静态语言的Java P>可以解释C++ C++ java关于动态类型或静态类型语言的例子吗?p> 我读到C C++和java都是静态语言。但我记得对这些问题还有其他看法。非常困惑

有人能解释C++;关于动态或静态语言的Java P>可以解释C++ C++ java关于动态类型或静态类型语言的例子吗?p> 我读到C C++和java都是静态语言。但我记得对这些问题还有其他看法。非常困惑,java,c++,c,dynamic-languages,static-language,Java,C++,C,Dynamic Languages,Static Language,谢谢 这是一个光谱。C没有任何动态键入功能,尽管它允许您使用void*和强制转换自己进行一些操作。C++和java在类方法上有动态调度,所以C++和java中有一些案例,在运行时,你不知道实际上在哪个对象上调用哪个方法。java包含一个反射API,它实际上允许你在运行时检查和修改类型,所以它比C++更动态一些。还有一些像Python和Ruby这样的语言,它们几乎完全是动态的——编译时几乎没有检查任何东西,而且你有“duck typing”这样的功能,只要它支持你所关心的操作,你就不太关心实际的类

谢谢

这是一个光谱。C没有任何动态键入功能,尽管它允许您使用
void*
和强制转换自己进行一些操作。C++和java在类方法上有动态调度,所以C++和java中有一些案例,在运行时,你不知道实际上在哪个对象上调用哪个方法。java包含一个反射API,它实际上允许你在运行时检查和修改类型,所以它比C++更动态一些。还有一些像Python和Ruby这样的语言,它们几乎完全是动态的——编译时几乎没有检查任何东西,而且你有“duck typing”这样的功能,只要它支持你所关心的操作,你就不太关心实际的类型。

还有什么意见?毫无疑问,C++、C++和java都是静态类型的语言,C++和java具有一些动态类型的特性。还有另一个问题:强类型和弱类型,这主要涉及隐式转换和重载。网上有许多关于这些问题的深入讨论;你可能想从

关于静态/强输入的不同观点开始,我刚读了这个问题,就无意中发现了这个问题:

我最喜欢的“强”的定义 “打字”来自于施赖拉姆 克里希那穆提(第205页):

那么什么是“强类型”?就我们所知,这是一个毫无意义的过程 短语,人们经常用在 荒谬的时尚

本杰明·皮尔斯(类型和类型的作者) (编程语言)写了一些东西 类似(见):

大约一年前,我花了几个星期的时间,试图解决问题 “强类型”的术语 “静态类型”、“安全”等,以及 我发现这非常困难。作为你的 消息指出,这些 术语千差万别,以致于难以解释 几乎没用


在hlovdal的回答之后,我将再次引用Benjamin Pierce的话,在这个问题上有一些积极的东西。我参考并扩展了他的“类型和编程语言”的第1章

Java是一种安全的语言(即防止运行时类型错误),主要进行静态类型检查。但是,由于继承(更准确地说,是子类型),变量的类型可能比指定值的类型更通用。 此外,该语言还允许验证对象是否具有特定类型,并在运行时向下转换对象-在此类操作期间,在运行时检查类型。因此,每个对象都有一个指向其类型的运行时表示形式的指针

C是一种使用静态类型检查的不安全语言。类型在运行时不存在。 C++仍然是一种不安全的静态类型检查语言,但它也对满足某些条件的类(即具有一些虚拟方法(如java中的所有对象))的运行时类型识别有限制。 编辑:“静态类型”是一个定义明确的概念。为了说明这一点,我将(松散地)定义三个属性,其中一个可能与“静态类型”相关

  • 在执行程序之前,它是类型检查的:java、C++和C++都满足这个标准。 如果程序类型检查,我们可以保证在运行时它不会有某类错误:C和C++失败这个标准,java通过它(虽然这是可能的,因为失败的转换被排除在这个错误的类别之外)。
  • 运行时不存在语言定义的类型表示。这个属性对于java和C++都失败,并且描述了C和Pascal等语言。

  • <>如果你说一个语言是静态类型的,如果它有上面提到的所有三个属性,那么java、C++和C++都不是静态类型的。

    你可能是静态类型和动态类型的。这不是对问题的任何回答,而是关于C、C++和java是否是静态类型的…这根本不是一个无用的术语。本杰明·皮尔斯(Benjamin Pierce)确实在他的引用中包含了静态输入的内容,内容是“这些术语的用法如此多样,以至于几乎毫无用处”。因此,我认为我的回答并不离题。什么时候一种语言停止静态类型化而开始动态类型化?当它有一些动态类型的特性时?当它有几个动态类型的特性时?最具动态类型的功能?只有动态类型的功能?我同意C、C++和java是静态类型的,但是仍然有不同的含义,这就是被问及问题的原因。一个“回答”引用某人说他们试图找出什么词是“但不能”的答案,这不是问题的答案。但这并没有改变你把静态类型(问题的主题)和强类型混合在一起的事实。“仍然有不同含义的空间,这是被明确给出的问题的原因。”——不,不是这样。@JimBalter:这个“答案”引用了非常受尊敬的编程语言研究人员的话,他们解释说,“静态类型”被用在如此多的不同方式,它是无用的。OP表示对这些语言有不同的看法;原因是,正如这里所解释的,这些术语定义不清。换句话说,这个答案解释了为什么对这些主题有这么多不同的看法。@ Jimbter:Pierce解释了“静态类型”是一个不明确的表达式。如果你考虑<代码>模板<代码>,C++在编译时有鸭式输入。@ KiSuneMyg模板完全是静态类型的100%。如果泛型与duck类型相同,那么就不需要la