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


    目录

    1.1类型系统和类型安全

    类型系统

    类型安全

    c++和c的差别

    面试题

    1.2const和volatile

    面试题


    1.1类型系统和类型安全

    类型系统

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

    • 数据类型:一个数据值的类型,如int、bool、char、double等

    • 类:一个对象的类型

    • 模板:一个类的类型

    类型系统在各种语言之间有非常大的不同,最主要的差异是编译阶段的类型检查以及只想阶段的操作实现方式。

    1.强类型定义语言和弱类型定义语言

    强类型定义语言:其中的一个变量一旦被指定了某个数据类型,如果不经强制转换,那么它就永远都是这个数据类型了,如果采取强制转换就可能丢失信息。

    弱类型定义语言:在定义变量时可以忽略数据类型,一个变量可以赋不同数据类型的值。

    2.动态类型语言和静态类型语言

    静态类型语言:数据类型在编译阶段检查,大多数都在使用变量之前定义数据类型,增强程序可靠性,程序有比较高的执行效率。

    动态类型语言:在执行期间才做类型检查,在进行编程的时候不需要分心去考虑程序编程问题,而集中精力思考业务逻辑的实现。但是不方便调试

    类型安全

    类型安全在很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。

    用来形容语言:依据在于该门编程语言是否提供保障类型安全的机制,如果编程语言不允许导致错误的运算或转换,就认为该门语言是类型安全的。

    用来形容程序:判别标准在于该程序是否隐含类型错误。

    1. int main()
    2. {
    3. printf("%f\n",10);
    4. return 0;
    5. }

    上述代码作为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. 多线程应用中被几个任务共享的变量。

  • 相关阅读:
    [DEBUG] QAT Nginx for docker 部署时"--with-ld-opt"出错
    VERYCLOUD睿鸿股份确认参展2024年ChinaJoy BTOB商务洽谈馆,期待与你相聚
    EfficientNet 系列网络学习
    如何在PDF上编辑文字?这三个方法让你轻松实现
    wireshark测试tcp三次握手与四次挥手
    单个vue页面 接收父页面参数的
    nvm切换node版本
    中国高等职业教育产业发展战略咨询与前景规划建议报告2022-2028年新版
    飞凌AM6254核心板的GPIO怎么用?进来聊聊
    Python高级_第4章_Python进程和线程
  • 原文地址:https://blog.csdn.net/m0_69724592/article/details/132773304