小工具知识网

当前位置: 首页 > 行业知识 > 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

行业知识

【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

2026-11-03 04:54:14 来源:互联网转载

目录

  • 一,函数重载
    • 1.1 函数重载的定义
      • 1.1.1.形参的类型不同
      • 1.1.2参数的个数不同
      • 1.1.3.参数的顺序不同
      • 1.1.4.有一个是缺省参数构成重载。但是调用时存在歧义
      • 1.1.5.返回值不同,不构成重载。因为返回值可接收,可不接受,调用函数产生歧义。
      • 1.2 C++支持函数重载的原理 -- 名字修饰
      • 二,引用
        • 2.1 引用的概念
        • 2.2 引用的使用场景
          • 2.2.1 引用做参数
          • 2.2.2 引用做返回值
          • 2.3 引用特性
          • 2.4 引用的权限问题
            • 2.4.1 举例1
            • 2.4.2 举例2
            • 2.4.3 举例3
            • 2.4.4 总结
            • 2.5 常引用
              • 2.5.1 类型转换时
              • 2.5.2 表达式运算时
              • 2.6 传值、传引用效率比较
              • 2.7 引用和指针的区别
              • 三,内联函数
                • 3.1 内联函数的概念
                • 3.2 inline 关键字
                • 3.3 内联的特性
                • 四,auto关键字(C++11)
                  • 4.1 给类型取别名
                  • 4.2 可由初始化自动推导类型
                  • 4.3 auto不能推导的场景
                  • 五,基于范围的for循环
                    • 5.1 范围for的语法
                    • 5.2 范围for的使用条件
                    • 六,nullptr关键字

                      一,函数重载

                      在C语言中,同名函数是不能出现在同一作用域的,但是在C++中却可以,但是要满足函数重载的规则。

                      那什么是函数重载呢?它的规则是什么呢?

                      1.1 函数重载的定义

                      函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

                      举几个例子:

                      1.1.1.形参的类型不同

                      void Swap(int* pa, int* pb){cout cout int a = 0, b = 1;double c = 1.1, d = 2.2;Swap(&a, &b);Swap(&c, &d);return 0;}cout cout int a = 0, b = 1;double c = 1.1, d = 2.2;f(1,'c');f('d',3);return 0;}cout cout int a = 0, b = 1;double c = 1.1, d = 2.2;f();f(5);return 0;}return 0;}void f(){cout int a = 0, b = 1;double c = 1.1, d = 2.2;int ret = f();cout int a = 1;//引用:&  b是a的别名int& b = a;//也可以给别名取别名int& c = b;//值相同,地址也相同cout int tmp = a;a = b; b = tmp;}int main(){int x = 1;int y = 2;Swap(x, y);//这里就不用传地址过去了cout int x = 0;int& y = x;//y是x的别名int z = 1;//这里y是z的别名,还是z赋值给y?//是赋值。引用一旦引用一个实体,就不能再改变指向了!y = z;cout //这里权限放大了。m是只读,n变成m的别名后,可读可写。const int m = 0;//int& n = m; //errint p = m;//可以,不是权限的放大。              //只是把m拷贝给p,p的修改不影响m。    //n也是只读的,权限的平移    const int& n = m;//可以    return 0;}const int m = 0;// 权限的放大//p1可以修改,*p1不行,const修饰的是p1指向的内容,即*p1。const int* p1 = &m;p1++;//可以//int* p2 = p1;//err. *p2是可以修改的,所以权限放大了。return 0;}//权限的缩小int x = 0; int& y = x;const int& z = x;//可以y++;//x,z都会修改return 0;}double d = 3.24;//类型转换int i = d;//int& r = d;err const int& r = d;//可以。加了const就相当于权限平移了。return 0;}int x = 0, y = 1;//表达式运算也会生成临时变量//int& r2 = x + y; //errconst int& r2 = x + y; //可以return 0;} int a[10000]; };void TestFunc1(A a) {}void TestFunc2(A& a) {}void TestRefAndValue(){A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i 

上一篇:公司怎么租服务器的?

下一篇:电脑串流服务器怎么办?