• C++基础概要:域作用限定符、重载、引用


    1. C++运行环境

    C++程序直接在操作系统上运行,而java有JVM虚拟机。

    2. 关于引用

    引用本质也是传地址。

    • 特点:
    1. 声明时必须初始化:即给值。
    2. 引用初始化后,而不能再做其它变量的别名。
    3. 引用不可以删除,因为引用指向的是一片已经存了值的空间,删除会使得之前的变量丢失。
      但是指针可以删除。

    2.1 关于引用和类型转换

    • 临时变量具有常性
    • 不同类型变量之前做赋值,会存在隐式类型转换。会根据根据右边的变量会生成临时的常量,即:临时变量都是常量

      • 如下:过程中包含着隐式类型转换,右值变量先生成常量再给左边。
      • 普通变量可以接收常量,但是引用不可以,如下两个图,所以必须给引用加const。
        请添加图片描述

      • 而下,不能赋值是因为中间变量是常量。
        请添加图片描述

      改正措施:使用const类型的常量
      【当不用指针时,习惯把常量的const放在前面位置】。
      请添加图片描述
      但是,使用auto就不会用它的const属性,只要了类型
      如下,10.11是常量,但是不会报错。
    auto a = 10.11;
    
    此外,auto转换任何类型变量过来,都不会出现const。
    
    • 总结

    不同类型变量转换会产生中间值,但是相同类型变量赋值不会产生中间值


    2.2 符号"&"本身

      1. 符号&是两用的,既是取地址符号,也是取别名符号。
    int a = 10;
    int& b = a;
    const int c = 10;
    const int& d = c;
    
      1. 如下,&做引用时,不可以把常量给int类型引用,因为权限 放大了了,本来c是常量不可以改变,但是用变量类型的d来接收c,说明d可以改变,相当于c也可以改变,所以权限自行放大必然不可以。
        请添加图片描述
        但是权限缩小是可以的。用const int & m = a;
        a是int类型,但是起了常量类型别名,权限缩小可以。
      1. 语法层面:
        指针和引用完全不同,形成的汇编中发现,指针会开空间,存储变量地址,而引用不开空间,只会对变量取别名。

    3. C++部分特殊语法

    + 语法糖:
    1. 【范围for】自动取数组中每个元素,取到的类型一定是数组中元素的类型,auto和arr中确定类型都可以。此外,必须是数组名,不能通过函数参数传入的数组,做范围for。
    
    int arr[] = { 1, 2, 3, 4 ,5 };
    for (auto e : arr)
    		cout << e << endl;
    
    		如下,范围for不可以用,参数中的数组名其实成了指针,**范围for必须通过数组名来用。**
    

    请添加图片描述

    • 语法层面:
      • 空指针:C++11推荐用:nullptr。
      • 空NULL也对应:0,而nullptr类型是指针,但是值仍然是0

    4. 函数重载

    同名同参数可以重载,但只有返回值不同不算重载。
    重载必须要参数不同,或者不同类型参数顺序不同。
    C语言不支持函数重载,C++才支持,因为函数命名规则机制。

    5.inline内联

    优点:

    1. C语言的宏有缺点:语法复杂、C不检查、不支持调试。
    2. 使用内联,指令会变少,速度快,而指令多意味着性能下降。

    注意:
    函数太大或有递归,内联就别用。因为inline是空间换时间。
    inline关键字函数会被编译器在视为内联函数,调用处可以展开,但是太大的话,编译器有权不展开。
    【补充】:
    auto可以自动补全类型。

    6.命名空间

    主要是为了解决名字冲突,当:

    1. 调用一些特定函数时,即使同名,但是加上命名空间调用,就可以区分不同同名的函数。
    2. 工程太大,模块太多,难免有同名函数。
  • 相关阅读:
    免费嵌入 NFT 数据到任何网站或平台
    5道面试题,拿捏String底层原理!
    华为 OD 一面算法原题
    3D基础:Y-Up和Z-Up
    2022款Thinkphp家政上门预约系统-全开源系统源码
    重定向到另一个页面
    A-Level经济真题(11)
    波卡生态中“中继链”、“DOT”的常见问题解答
    MODOBUS伺服通讯设置
    变分自编码器VAE
  • 原文地址:https://blog.csdn.net/myscratch/article/details/126609927