专栏首页landv《挑战30天C++入门极限》新手入门:C++下的引用类型

《挑战30天C++入门极限》新手入门:C++下的引用类型


新手入门:C++下的引用类型

  引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。 引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为test 的引用,但是int &test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;)。

#include <iostream>  
using namespace std;  
  

void main(void)  
{  
  
int a=10;  

int &test=a;  
test=test+2;  
  
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;  

  
cin.get();  
} 

  观察并编译运行上面的代码你会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的!

  结合前一个教程的内容我们来说一下const引用的相关内容,这里要特别注意,和前一个教程一样带const修饰的引用同样也容易混淆概念! 


  const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子:

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
  
int a=10;  

//double &test = a + 1.2f; //这句就是错误的!  
const double &test = a + 1.2f;  
  
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;  

  
cin.get();  
} 

  上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和test的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢? 


  道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。

int a=10;  
const double &test = a + 1.2f;

  这样的一段代码在编译器认为却是下面的方式进行的

int a=10;  
int temp = a;  
const double &test = temp + 12.f

  这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 
改变的是temp而不是a,所以就出现了a和test显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《挑战30天C++入门极限》C++面向对象编程入门:类(class)

    landv
  • 《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义

      函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?   如果我们有一个int test(int a)的函数,那么,它的地址就...

    landv
  • 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

    landv
  • Kitty-Cloud服务搭建过程剖析

    https://github.com/yinjihuan/kitty-cloud[1]

    猿天地
  • Spring Boot 2 实战:使用 Spring Boot Admin 监控平台

    生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring...

    码农小胖哥
  • 004.ELK-6.6.0安装部署

    CoderJed
  • 使用EricScript进行融合基因的分析

    在众多评测融合基因软件的文章中,EricScript这款软件还是名列前茅的,值得一试。该软件的网站如下

    生信修炼手册
  • SpringCloud组件:Eureka的服务发现与消费

    在之前的章节我们已经把服务注册到Eureka Server,那么我们该怎么调用已经注册后的服务呢? 我们本章来简单的介绍我们具体该怎么调用服务节点请求内容。

    恒宇少年
  • 再来聊一聊「动态规划」

    动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方...

    五分钟学算法
  • 1.9.Spring Boot核心注解@FixMethodOrderJava测试方法控制执行顺序

    itjim

扫码关注云+社区

领取腾讯云代金券