首页 > 编程语言 > 详细

C++学习笔记一

时间:2019-12-10 11:50:08      阅读:47      评论:0      收藏:0      [点我收藏+]

在程序中,调用函数时,内存会从一个地址跳到一个特定的地址上,当函数执行完后,在返回。

内联函数则可以不用跳来跳去,但有点消耗空间,它会直接在函数后面去执行函数里的代码,但会产生函数的副本。定义内联函数的方法是 inline 并且一般是函数只有一行,多行不推荐使用。内联函数跟宏有点类似,但又很不相同,你用宏定义的求x^2函数,是不能放表达式的,而内联函数时可以的,当然这个是可以解决的。但宏不能按值传递。即使使用新的定义,仍会把C递增两次(拿x*x来说,宏会传递两次x的值) ,而内联只会递增一次。

 

变量引用,可以将让一个值拥有两个变量的名称,例如int rats; int & rodents=rats;这样可以rodents和rats是一样的值,并且当你rodents加1的时候,rats也会加1,当你输出他们的两个函数的地址会发现地址是一模一样的。这根指针有点像但又不是彻底的像,变量引用必须在定义的时候就赋值,而且一旦引用了,就绝对不能再引用新的变量(很忠诚).

 

将引用作为函数参数时,可以对其直接进行值的修改,但是用了const后就无法修改了,并且如果实参与引用的参数不匹配,则C++会生成临时变量,什么叫临时变量呢?临时变量就是当一个函数中其中一个参数时double &a,而你传的参数时long a=4;由于形参和实参的类型不同,所以在函数调用时,会生成一个匿名变量来接收long a=4的变量,然后在传入函数里面。但这样会导致,a的值无法被函数改变,所以有点类似值传递效果了。唯一解决的方式是进制创建临时变量。因此,如果声明将引用制定为const,C++将在必要时生成临时变量。

int & accumulate(int & a,const int & b) {return a}可以构造如下语句:

accumulate(a,b)=c;因为accumulate返回的是引用,所以该语句等于accumulate(a,b);a=c;

为何上面这条语句不会报错呢?常规函数(非引用)的返回值是右值(=号右边的值),这是因为这种返回值位于临时内存单元中,运行到下一跳语句时,它们(返回值)可能不在存在了。

而左式中,必须标识一个可修改的内存块。

由于返回函数终止时,会导致里面的内存单元全部释放,而你的函数又是返回引用时,例如int & accumulate(int & a,const int & b) {int c;c=a;return c;}函数运行完毕后,c将不再存在,也就是说返回的值也没有了。解决方法可以使用参数来传递函数的引用,或者用new来分配新的存储空间,在返回。

 

C++学习笔记一

原文:https://www.cnblogs.com/pppyyyzzz/p/12015735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!