C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因

2024-02-26 1118阅读

温馨提示:这篇文章已超过409天没有更新,请注意相关的内容是否还可用!

文章目录

    • 一、引用
      • 1.1 引用概念
      • 1.2 引用特性
      • 1.3 常引用
      • 1.4 使用场景
        • 1.4.1 做参数
        • 1.4.2做返回值
        • 1.5 引用和指针的区别
        • 1.6 小结一下
        • 二、内联函数
          • 2.1 内联的概念
          • 2.2 内联的特性
          • 2.3 【面试题】
          • 三、auto关键字(C++11)
            • 3.1 类型别名思考
            • 3.2 auto简介
            • 四、auto的使用细则
              • 4.1 基于范围的for循环(C++11)
              • 4.2 范围for的使用条件
              • 五、指针空值nullptr(C++11)

                一、引用

                1.1 引用概念

                C++是C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用(reference)就是C++对C语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名; -->百度百科

                • 这个引用就相当于是别名
                  void TestRef()
                  {
                  	int a = 10;
                  	int& ra = a;//
                  	int a = 10;
                  	// int& ra; // 该条语句编译时会出错,必须要初始化
                  	int& ra = a;
                  	int& rra = a;
                  	printf("%p %p %p\n", &a, &ra, &rra);
                  }
                  
                  	int a = 0;
                  	// 权限的缩小
                  	const int& c = a;
                  	
                  	const int x = 10;
                  	// 权限的放大
                  	int& y = x;
                  	return 0;
                  }
                  
                  	int tmp = *a;
                  	*a = *b;
                  	*b = tmp;
                  }
                  int main()
                  {
                  	int x = 0, y = 1;
                  	
                  	Swap(&x, &y);
                  	return 0;
                  }
                  
                  	int tmp = a;
                  	a = b;
                  	b = tmp;
                  }
                  int main()
                  {
                  	int x = 0, y = 1;
                  	
                  	Swap(x, y);
                  	return 0;
                  }
                  
                  pimg src="https://img-blog.csdnimg.cn/direct/e7fc7e4b62a245c7a33de9b7e5830ea0.png" //p pimg src="https://img-blog.csdnimg.cn/direct/68956c2f0513430ab5c5deba3743c3b1.png" //p ulli那么引用可以代替指针吗?【不可以!】 blockquote p指针和引用的功能是类似的,有重叠的/ppC++的引用,对指针使用比较复杂的场景进行一些替换,让代码更简单易懂,但是不能完全替代指/p /blockquote ulli针引用不能完全替代指针原因:引用定义后,不能改变指向 blockquote p就比如说在数据结构中学的链表,指针需要改变指向,引用不能改变指向,这就是引用不能代替指针的原因/p /blockquote ulli那java和pythone等其他语言有没有指针?–>没有
                • 那他们的链表是怎么实现的呢?–>引用
                • 本质上就是引用可以改变指向
                  • 我们再来看一个案例,在我们学数据结构的时候单链表学习阶段
                  • 有这这么一段代码,这里的pphead必须要传二级指针,有点不好理解呀
                    void PushBack(struct Node** pphead, int x)
                    {
                    	 *pphead = newnode;
                    }
                    int main()
                    {
                    	struct Node* plist = NULL;
                    	return 0;
                    }
                    
                    • 而我们学了引用就可以这样写了,加上一个引用,也就是phead是plist的一份临时拷贝
                      void PushBack(struct Node*& phead, int x)
                      {
                      	phead = newnode;
                      }
                      int main()
                      {
                      	struct Node* plist = NULL;
                      	return 0;
                      }
                      

                      传值、传引用效率比较

                      • 我们这里可以测试一下性能,对比一下传值、传引用
                        #include 
                        struct A { int a[10000]; };
                        void TestFunc1(A a) {}
                        void TestFunc2(A& a) {}
                        void main()
                        {
                        	A a;
                        	// 以值作为函数参数
                        	size_t begin1 = clock();
                        	for (size_t i = 0; i 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]