C++语言深度解析--类型系统和类型安全--const和volatile

目录

1.1类型系统和类型安全

类型系统

类型安全

c++和c的差别

面试题

1.2const和volatile

面试题


1.1类型系统和类型安全

类型系统

类型系统是一门编程语言最核心也是最基础的部分。一门计算机语言无论基于何种编程范式,都必须首先对类型系统做出明确的定义。

  • 数据类型:一个数据值的类型,如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是一种结构化编程语言,而c++是面向对象的编程语言。

面试题
  • c++是类型安全语言吗?

A.是 B.不是

c++不是类型安全的语言。例如可以将0作为false、非零作为true。一个函数即使是bool类型的,也可以返回int类型,并且自动将0转换成false、非零转换成true。

  • 弱类型语言是指不需要进行变量/对象声明的语言。( )属于弱类型语言。

A. Java B.C/C++ C.Python D.C#

  • C++和C有什么不同?

1.2const和volatile

面试题
  • 说明const char *p和char *const p两个定义的区别

  • 总结const的应用和作用

    1. 若要阻止一个变量被改变,可以使用const关键字。在定义该const变量时通常需要对它进行初始化,因为以后就没有机会去改变它了

    2. 对指针来说,可以定义指针本身为const,也可以指定指针所指的内容为const,或两者同时指定为const。

    3. 在一个函数定义中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值。

    4. 对于类成员函数,若指定其为const类型,则表明其是一个常成员函数,不能修改类的数据成员。

    5. 对于类的成员函数,有时候必须指定其返回值为const类型,以使其返回值不为“左值”。

  • 说明volatile关键字的作用

    用volatile关键字修饰的变量确保编译器不对其代码进行优化,且要求每次直接从内存读取值。

  • 一个指针可以是volatile变量吗?

    可以,因为指针和普通变量一样,有时也可能会被意想不到地改变。例如,中断服务子程序修改一个指向buffer的指针变量时需要用volatile来修饰这个指针。

  • 给出几个使用volatile关键字的示例

    1. 并行设备的硬件寄存器(如状态寄存器)。

    2. 一个中断服务子程序中会访问到的非自动变量。

    3. 多线程应用中被几个任务共享的变量。

你可能感兴趣的:(c++,c++,安全,面试)