我一直在阅读有关
相对
而且我知道它们是不同的东西(也讨论过here,所以我一直以这种方式考虑示例语言:
所以我的问题是,那里有任何静态弱类型的语言吗? (我想如果没有的话,这样做毫无意义)。而且我上面的理解/例子正确吗?
未选中的显式转换
int main () {
char c = 'a';
void *p;
(int)c + (int)p;
}
但是,在Haskell中,我可以将on类型显式转换为另一个,但是只有某些类型可以使用。
ord('c') + 10 fromIntegral (2::Int) + 4.13
Java也具有静态类型转换,这使程序员可以例如向下转换对象。这使静态类型系统不健全。但是,正是出于这个原因,Java具有动态类型检查。是的,Java具有动态和静态类型检查。出于这个原因,但是,我认为许多人会认为Java是强类型的。自动投射
Perl和Javascript将字符串当作数字,如果它们看起来像一个数字,并自动使其起作用。
'2 is my favorite number' + 413 == 415 # in Perl
如果要在Scheme中将字符串转换为数字,则必须使用执行检查并在字符串不是数字的情况下引发异常的函数来显式转换。
(= (+ (string->number '2') 413) 415) ; In Scheme
因此,很多人会认为Scheme是强类型的。完全没有类型
在某些语言中,没有任何类型。未键入的Lambda微积分就是这样的一个例子。这显然不是强类型的。一切都是功能。我可以使用教堂数字或成对或字符串的数字,也可以使用各种编码的任何数字,但值仅表示我同意的含义,并且肯定有重叠。
比较
就像我说的那样,这些术语定义不明确,但是以相对方式使用时,它们会更有用。例如,我可以断言OCaml比Java具有更强的类型,因为Java允许显式的静态向下转换,而OCaml则不允许。
结论
这些术语并不严格,但很有用。在我看来,要回答您的原始问题,C / C ++是静态的并且是弱类型的,因此符合说明。