编译时能进行的类型检查是
㈠ java的泛型类型检查是什么时候做的
在使用泛型时能在编译时被检测出的问题,在未使用泛型时是怎样的情况?即怎样才会出现这类上文中最后一句提到的不是更容易解决的运行时错误?(以代码举
㈡ C++是一种静态数据类型检查的语言。 什么是静态数据类型检查
换种说法就是编译时类型检查, 至于运行时的类型检查就需要自己处理了
㈢ 按异常在编译时是否被检测来分,异常可以分成哪两种
检查时异常(checkException)和运行时异常(runtime Exception)
㈣ 内联函数在编译时是否做参数类型检查
这是必须滴啊。
㈤ 内联函数在编译时是否作参数类型检查
现在你不必理会这些东西。现在的CPU很智能的,只要你的语法不错误,内联和写在外面,不会有任何的区别。
㈥ 对于C++语言来说,什么叫做类型检查
静态类型检查:编译器检查,int i = "k" 编译器直接报错
还有dynamic_cast<>()也是由编译器进行类型检查
㈦ 类型系统的类型检查
类型检查所进行的检验处理以及实行类型的约束,可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器所进行语义分析中进行的。如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此处理为强类型,反之称为弱类型。 如果一个编程语言的类型检查,可在不测试运行时期表达式的等价性的情况下进行,该语言即为静态类型的。一个静态类型的编程语言,是在运行时期和编译时期之间的处理阶段下重视这些区别的。如果程序的独立模块,可进行各自的类型检查(独立编译),而无须所有会在运行时出现的模块的那些信息,该语言即具有一个编译时期阶段。如果一个编程语言支持运行时期(动态)调度已标记的数据,该语言即为动态类型的。如果一个编程语言破坏了阶段的区别,因而类型检查需要测试运行时期的表达式的等价性,该语言即为依存类型的。
在动态类型中,经常在运行时期进行类型标记的检查,因为变量所约束的值,可经由运行路径获得不同的标记。在静态类型编程语言中,类型标记使用辨识联合类型表示。
动态类型经常出现于脚本语言和RAD语言中。动态类型在解译语言中极为普遍,编译语言则偏好无须运行时期标记的静态类型。对于类型和隐式类型语言较完整的列表参见类型和隐式类型语言。
术语推断类型(鸭子类型,ck typing)指的是动态类型在语言中的应用方式,它会“推断”一个数值的类型。
某些静态语言有一个“后门”,在这些编程语言中,能够编写一些不被静态类型所检查的代码。例如,Java 和 C-风格的语言有“转型”可用。在静态类型的编程语言中,不必然意味着缺乏动态类型机制。例如 Java 使用静态类型,但某些运算需要支持运行时期的类型测试,这就是动态类型的一种形式。更多静态和动态类型的讨论,请参阅编程语言。 对静态类型和动态类型两者之间的权衡也是必要的。
静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。然而,有多少的类型错误发生,以及有多少比例的错误能被静态类型所捕捉,仍有争论。静态类型的拥护者认为,当程序通过类型检查时,它才有更高的可靠性。虽然动态类型的拥护者指出,实际流通的软件证明,两者在可靠性上并没有多大差别。可以认为静态类型的价值,在于增进类型系统的强化。强类型语言(如 ML 和 Haskell)的拥护者提出,几乎所有的臭虫都可以看作是类型错误,如果编写者以足够恰当的方式,或者由编译器推断来声明一个类型。
静态类型通常可以编译出速度较快的代码。当编译器清楚知道所要使用的数据类型,就可以产生优化过后的机器码。更进一步,静态类型语言中的编译器,可以更轻易地发现较佳捷径。某些动态语言(如 Common Lisp)允许任意类型的声明,以便于优化。以上理由使静态类型更为普及。参阅优化。
相较之下,动态类型允许编译器和解译器更快速的运作。因为源代码在动态类型语言中,变更为减少进行检查,并减少解析代码。这也可减少编辑-编译-测试-除错的周期。
静态类型语言缺少类型推断(如 Java),而需要编写者声明所要使用的方法或函数的类型。编译器将不允许编写者忽略,这可为程序起附加性说明文件的作用。但静态类型语言也可以无须类型声明,所以与其说是静态类型的代价,倒不如说是类型声明的报酬。
静态类型允许构造函数库,它们的用户不太可能意外的误用。这可作为传达库开发者意图的额外机制。
动态类型允许建构一些静态类型系统所做不出来的东西。例如,eval 函数,它使得运行任意数据作为代码成为可能(不过其代码的类型仍是静态的)。此外,动态类型容纳过渡代码和原型设计,如允许使用字符串代替数据结构。静态类型语言最近的增强(如 Haskell 一般化代数数据类型)允许 eval 函数以类型安全的方式撰写。
动态类型使元程序设计更为强大,且更易于使用。例如 C++ 模板的写法,比起等价的 Ruby 或 Python 写法要来的麻烦。更高度的运行时期构成物,如元类型(metaclass)和内观(Introspection),对静态类型语言而言通常更为困难。
㈧ 编译原理试题,高手帮帮忙 ,在线等
太多了吧。。。
第五题是 句柄
㈨ java编译时类型和运行时类型该如何理解
编译期只会检查实例声明的类型和强制转化的类型是否存在extend/implement关系,因为从声明变量类型,到强制转化变量的类型之间可能存在编译期无法解析的代码,虽然示例中只是一个简单的赋值,肉眼就可以判断实际类型,但是对于编译器来说是无法判断的,举个简单的例子:
public static void foo(boolean flag) {
Useful xx = flag ? new Useful() : new MoreUseful();
((MoreUseful)xx).g(); // 编译器如何判断此处是否有错误?
// flag=false的时候可以正常运行,就不能说这里有编译期错误}public static void main(String[] args) {
foo(true);
foo(false);
}