首页后端开发其他后端知识C++引用的用法是什么,有哪些要点

C++引用的用法是什么,有哪些要点

时间2024-03-28 12:26:03发布访客分类其他后端知识浏览1048
导读:关于“C++引用的用法是什么,有哪些要点”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“C++引用的用法是什么,有哪...
关于“C++引用的用法是什么,有哪些要点”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“C++引用的用法是什么,有哪些要点”吧。

目录
  • 一、C++ 引用
    • 1.规则
    • 2.应用
    • 3.引用提高
      • 1.可以定义指针的引用,但不能定义引用的引用。
      • 2.可以定义指针的指针,不能定义引用的指针。
      • 3.可以定义指针数组,但不能定义引用数组,可以定义数组引用。
      • 4.常引用
    • 4.常引用原理
      • 5.const的好处
        • 6.引用的本质浅析
        • 总结

          一、C++ 引用

          变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用,是为己有变量起一个别名。

          声明如下

          int main()
          {
              
          	int a;
              
          	int &
              b = a;
          
          }
              
          

          1.规则

          1.引用没有定义,是一种关系型声明。声明它和原有某一变量的关系。类型与原有类型保持一致,且不分配内存。与被引用的变量有相同的地址。

          2.声明的时候必须初始化,一经声明,不可变更。

          3.可对引用,再次引用。多次引用的结果,是某一个变量具有多个别名。

          4.& 符号前面有数据类型时,是引用。其他均为取地址。

          #include iostream>
              
          using namespace std;
          
          int main()
          {
              
          	int a,b;
              
          	int &
              r = a;
              
          	int &
              r = b;
               //错误,不可更改原有的引用关系
          	float &
              rr = b;
               //错误,引用类型不匹配
          	cout&
              a&
              rendl;
               //变量与引用具有相同的地址。
          	int &
              ra = r;
           //可对引用更次引用,表示 a 变量有两个别名,分别是 r 和 ra
          }
              
          

          2.应用

          1.值作函数参数

          void swap(int a, int b);
               //无法实现两数据的交换
          void swap(int *p, int *q);
               //开辟了两个指针空间实现交换
          

          2.引用作函数参数

          #include iostream>
              
          using namespace std;
              
          void swap(int &
              a, int &
          b){
              
          	int tmp;
              
          	tmp = a;
              
          	a = b;
              
          	b = tmp;
          
          }
          
          int main(){
              
          	int a = 3,b = 5;
              
          	cout"a = "a"b = "bendl;
              
          	swap(a,b);
              
          	cout"a = "a"b = "bendl;
              
          	return 0;
          
          }
              
          


          c++中引入引用后,可以用引用解决的问题。避免用指针来解决。

          3.引用提高

          引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得指针的优良特性。所以再对引用取地址,建立引用的指针没有意义

          1.可以定义指针的引用,但不能定义引用的引用。

          int a;
              
          int* p = &
              a;
              
          int*&
               rp = p;
               // ok
          int&
               r = a;
              
          int&
              &
               rr = r;
              //error
          

          例子:

          #include iostream>
              
          using namespace std;
          
          void swap(char *pa,char *pb)
          {
              
          	char *t;
              
          	t=pa;
              
          	pa=pb;
              
          	pb=t;
          
          }
          
          void swap2(char **pa,char **pb)
          {
              
          	char *t;
              
          	t=*pa;
              
          	*pa=*pb;
              
          	*pb=t;
          
          }
              
          void swap3(char *&
              pa,char *&
          pb)//指针的引用
          {
              
          	char *t;
              
          	t=pa;
              
          	pa=pb;
              
          	pb=t;
          
          }
          
          int main()
          {
              
          	char *pa="china";
              
          	char *pb="america";
              
          	cout"pa"paendl;
              
          	cout"pb"pbendl;
              
          	//swap(pa,pb);
              
          	//swap2(&
              pa,&
              pb);
              
          	swap3(pa,pb);
              
          	cout"pa"paendl;
              
          	cout"pb"pbendl;
              
          	return 0;
          
          }
              
          


          2.可以定义指针的指针,不能定义引用的指针。

          int a;
              
          int* p = &
              a;
              
          int** pp = &
              p;
               // ok
          int&
               r = a;
              
          int&
              * pr = &
              r;
               // error
          

          3.可以定义指针数组,但不能定义引用数组,可以定义数组引用。

          int a, b, c;
          
          int* parr[] = {
              &
              a, &
              b, &
          c}
              ;
               // ok
          int&
           rarr[] = {
          a, b, c}
              ;
           // error
          int arr[] = {
          1, 2, 3}
              ;
              
          int (&
              rarr)[3] = arr;
               // ok
          

          4.常引用

          const 引用有较多使用。它可以防止对象的值被随意修改。因而具有一些特性。

          (1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不合法的。

          这个原因比较简单。既然对象是 const 的,表示不能被修改,引用当然也不能修改,必须使用 const 引用。实际上,const int a=1; int & b=a; 这种写法是不合法的,编译不过。

          (2)const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。

          这个是const 引用与普通引用最大的区别。const int & a=2; 是合法的。double x=3.14; const int& b=x; 也是合法的。

          4.常引用原理

          const 引用的目的是,禁止通过修改引用值来改变被引用的对象。const 引用的初始化特性较为微妙,可通过如下代码说明

          double val = 3.14;
              
          const int &
              ref = val;
               // int const &
               int &
               const ??
          double &
               ref2 = val;
              
          coutref" "ref2endl;
              
          val = 4.14;
              
          coutref" "ref2endl;
              
          

          上述输出结果为 3 3.14 和 3 4.14。因为 ref 是 const 的,在初始化的过程中已经给定值,不允许修改。而被引用的对象是 val,是非 const 的,所以 val 的修改并未影响 ref 的值,而 ref2 的值发生了相应的改变。

          那么,为什么非 const 的引用不能使用相关类型初始化呢?实际上,const 引用使用相关类型对象初始化时发生了如下过程:

          int temp = val;
              
          const int &
              ref = temp;
              
          

          如果 ref 不是 const 的,那么改变 ref 值,修改的是 temp,而不是 val。期望对 ref 的赋值会修改 val 的程序员会发现 val 实际并未修改。

          int i=5;
              
          const int &
               ref = i+5;
              
          //此时产生了与表达式等值的无名的临时变量,
          //此时的引用是对无名的临时变量的引用。故不能更改。
          coutrefendl;
          
          

          5.const的好处

          1,使用 const 可以避免无意修改数据的编程错误。

          2,使用 const 可以处理 const 和非 const 实参。否则将只能接受非 const 数据。

          3,使用 const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参数不匹配,就会生成临时变量)

          6.引用的本质浅析

          1.大小与不可再引用

          struct TypeP
          {
              
          	char *p;
          
          }
              ;
          
          struct TypeC
          {
              
          	char c;
          
          }
              ;
          
          struct TypeR
          {
              
          	char&
               r;
           //把引用单列出来,不与具体的对象发生关系
          }
              ;
          
          int main()
          {
              
          	printf("%d %d %d\n",sizeof(TypeP),sizeof(TypeC),sizeof(TypeR));
              
          	return 0;
          
          }
              
          


          结论:引用的本质是,是对常指针 type * const p 的再次包装。

          1、const int *pi                                   指向常量的指针。
          2、int * const pi                                  指针本身是一个常量,称为“指针常量”、“常指针”。
          3、const int * const pi                       指向常量的指针常量。
          

          总结


          以上就是关于“C++引用的用法是什么,有哪些要点”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

          声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


          若转载请注明出处: C++引用的用法是什么,有哪些要点
          本文地址: https://pptw.com/jishu/654938.html
          Bootstrap实现分页功能的方法和步骤是什么 C++中自增自减运算符怎么用,指针自增自减什么意思

          游客 回复需填写必要信息