目录
类型系统是一门编程语言最核心也是最基础的部分。一门计算机语言无论基于何种编程范式,都必须首先对类型系统做出明确的定义。
数据类型:一个数据值的类型,如int、bool、char、double等
类:一个对象的类型
模板:一个类的类型
类型系统在各种语言之间有非常大的不同,最主要的差异是编译阶段的类型检查以及只想阶段的操作实现方式。
1.强类型定义语言和弱类型定义语言
强类型定义语言:其中的一个变量一旦被指定了某个数据类型,如果不经强制转换,那么它就永远都是这个数据类型了,如果采取强制转换就可能丢失信息。
弱类型定义语言:在定义变量时可以忽略数据类型,一个变量可以赋不同数据类型的值。
2.动态类型语言和静态类型语言
静态类型语言:数据类型在编译阶段检查,大多数都在使用变量之前定义数据类型,增强程序可靠性,程序有比较高的执行效率。
动态类型语言:在执行期间才做类型检查,在进行编程的时候不需要分心去考虑程序编程问题,而集中精力思考业务逻辑的实现。但是不方便调试
类型安全在很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。
用来形容语言:依据在于该门编程语言是否提供保障类型安全的机制,如果编程语言不允许导致错误的运算或转换,就认为该门语言是类型安全的。
用来形容程序:判别标准在于该程序是否隐含类型错误。
- int main()
-
- {
-
- printf("%f\n",10);
-
- return 0;
-
- }
上述代码作为c/c++程序都可以编译通过,但是在执行程序的过程中却分别表现为值为0.00000和崩溃。
所以c/c++都不是类型安全的语言
从类型系统角度看,c++的类型系统包含c的类型系统,增加了类和模板类型,所以c是一种结构化编程语言,而c++是面向对象的编程语言。
c++是类型安全语言吗?
A.是 B.不是
c++不是类型安全的语言。例如可以将0作为false、非零作为true。一个函数即使是bool类型的,也可以返回int类型,并且自动将0转换成false、非零转换成true。
弱类型语言是指不需要进行变量/对象声明的语言。( )属于弱类型语言。
A. Java B.C/C++ C.Python D.C#
C++和C有什么不同?
说明const char *p和char *const p两个定义的区别
总结const的应用和作用
若要阻止一个变量被改变,可以使用const关键字。在定义该const变量时通常需要对它进行初始化,因为以后就没有机会去改变它了
对指针来说,可以定义指针本身为const,也可以指定指针所指的内容为const,或两者同时指定为const。
在一个函数定义中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值。
对于类成员函数,若指定其为const类型,则表明其是一个常成员函数,不能修改类的数据成员。
对于类的成员函数,有时候必须指定其返回值为const类型,以使其返回值不为“左值”。
说明volatile关键字的作用
用volatile关键字修饰的变量确保编译器不对其代码进行优化,且要求每次直接从内存读取值。
一个指针可以是volatile变量吗?
可以,因为指针和普通变量一样,有时也可能会被意想不到地改变。例如,中断服务子程序修改一个指向buffer的指针变量时需要用volatile来修饰这个指针。
给出几个使用volatile关键字的示例
并行设备的硬件寄存器(如状态寄存器)。
一个中断服务子程序中会访问到的非自动变量。
多线程应用中被几个任务共享的变量。