小工具知识网

当前位置: 首页 > 行业知识 > 【C++入门篇】引用&&内联函数&&auto&&范围for&&nullptr

行业知识

【C++入门篇】引用&&内联函数&&auto&&范围for&&nullptr

2026-11-09 05:19:52 来源:互联网转载

文章目录

    • 6.引用
        • 概念
        • 引用特性
        • 常引用
        • 引用的使用场景
          • 1.引用做函数参数
          • 2.引用做返回值
          • 传值,传引用的效率比较
            • 测试代码
            • 值和引用作为返回值类型的性能比较
              • 测试代码
              • 引用和指针的区别
                • 结论
                • 7.内联函数
                    • 面试题:宏的优缺点
                    • 8.auto关键字(C++11)
                        • 简介:
                        • auto使用规则
                        • auto不能推导的场景
                        • 9.基于范围的for循环(C++11)
                            • 语法
                            • 范围for的使用条件:
                            • 10.指针空值nullptr(C++11)
                                • C++98中的指针空值
                                • ���意点:

                                  6.引用

                                  C语言中函数的传参有两种方式:

                                  1.传值 2.传址

                                  虽然这两种方式都可以实现函数传参但是却各自有着自己的优缺点:

                                  传值:无法改变形参的值

                                  传址:不是很形象而且不安全

                                  在升级版C++中为了解决这种问题就使用了引用&


                                  概念

                                  引用不是新定义一个变量,而是给已存在变量取了一个别名

                                  编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间,


                                  引用的方法:

                                  • 类型& 引用变量名(对象名) = 引用实体;

                                    例子1

                                    #includeusing namespace std;int main(){    int a = 10;    //引用定义    int& b = a;    //取地址    int* pa = &a;    //编译器不会为引用变量开辟内存空间    cout     int a = 10;    int& ra = a;//int a = 10;double& b = a;}    int a = 10;    int& b = a;    cout int a = 10;int& b = a;double b = 1.1;//err}    double d = 3.14;    //int& rd = d; //err类型不同    const int& b = d;//OK    return 0;}    cout   const int a = 10;   const int&b = a;   func(a);//err  a可读 引用传参给x,x是可读可写,权限放大,err   func(10);//err 10是常数只可读}    cout     const int a = 10;    const int& b = a;    func(a);  //10    func(10); //10}    const int& b = M;//ok,b:只可读 M:只可读 权限不变   // int& c = M;//err M是常数只可读,而c可读可写,权限扩大}    int tmp = *p1;    *p1 = *p2;    *p2 = tmp;}//函数修饰名:_Z4swapiivoid Swap(int r1,int r2)//传值{    int tmp = r1;    r1 = r2;    r2 = tmp;}//函数修饰名:_Z4swapririvoid Swap(int& r1,int& r2) //传引用{    int tmp = r1;    r1 = r2;    r2 = tmp;}    int tmp = r1;    r1 = r2;    r2 = tmp;}int main(){    int a = 1;    int b = 2;    cout int c = x + y;return c;}int main(){int ret = Add(1, 2);cout int c = x + y;return c;}int main(){int ret = Add(1, 2);cout     int c = x + y;    return c;}int main(){    int& ret = Add(1,2);//ret也是c的引用    cout     //n放在静态区,出了函数栈帧也不销毁,所以可以使用传引用返回    static int n = 0;    n++;    return n;}int main(){    int a = Count();    cout     return str[i];}int main(){    char arr[10] = "Mango";    char c = func(arr, 3);    cout     int* p =(int*)malloc(sizeof(int));    return *p;}//方式2: errint*& fun(){    int* p =(int*)malloc(sizeof(int));    return p;}static int a[N];return a[i];//返回的是a[i]的别名}int main(){//读for (size_t i = 0; i 

上一篇:对对app下载问题全解析,无法下载的原因及解决方案

下一篇:宝塔面板建站怎么访问?