概述
内联函数,引用 基础知识总结
内联函数
1.首先,什么是内联函数?
常规函数和内联函数的区别在于:编译器如何使用它。
①:常规函数.执行到该处时,计算机跳到另一个地址(函数定义的地址)执行函数,然后返回结果,结束后回到原地址继续执行。
②:内联函数:执行到该处时,计算机会将内联函数的代码复制到此处,并执行。何谓“内联”?将函数代码和其他程序代码连接起来。
2.内联函数的优势和劣势。
优势:内联函数的运行速度比常规函数快,因为省去了调用时间,因此注意:什么时候使用内联函数?当调用时间>执行时间时。我们可以使用内联,这也就限制了内联的使用:不能是太过复杂的函数
劣势:会占用更多的内存。
3.如何使用内联函数?
必须:
●在声明前加:inline
●在定义前加:inline
因为内联函数一般很短,所以可以在声明是对函数定义。例如:
inline double square(double x) {return x+2}
4.注意事项:
内联的指令并不是命令,而是建议。也就是说,编译器可以不遵寻指令。事实也是如此,当编译器认为,该函数过于复杂时,不会执行内联,而是将它当做常规函数执行。比如:递归函数。
5.内联和宏:
inline属于c++新增的特性。在c语言中,通过宏来实现内联。比如:
#define SQUARE(X) XX
它的实现方式属于:文本替换,而非参数传递。
也就是说:
a=SOUARE(4+5) 实际=4+54+5=29
引用
1.何为引用?
引用,相当于一个变量的别名。类似于指针,如果将a声明为b的引用,那么也可以通过a来操纵b。主要用于形参来实现地址传递,直接改变原始数据。
2.引用的使用
①创建
声明方式。
int a=1;
int &b=a;
而指针:
int * c=&a;
注意:声明引用时,&不是地址运算符了。
例如:
cout<<b; //1
cout<<&b //打印b的地址。这时才是取址运算符。
3.引用和指针:
很多人会认为:引用就是指针(NO!!!),其实并不如此。引用和指针也有不同之处。
int a=1;
int b=&a;
int &c=a;
我们创建了一个整数变量,一个指向它的指针,一个它的引用。此时b和c都等于a。(其实我觉得可以理解为。引用多了一个*符号,解引用。)
还有一点不同,那就是引用必须在声明时初始化,不能像指针一样先声明在初始化,
int &b=a;
可以理解为:int *const c=&a;一个指向不变的指针(大忠诚,永不背叛!!!)
4.引用做函数参数。
引用做函数参数时,采用按引用传递(和地址传递差不多,可以直接修改变量)
指针做参数和引用做参数时的不同:
指针和引用定义是有所不同,并且在指针使用过程中需要解地址。如果不加COUt输出的将是a的地址而不是值。
临时变量,引用参数和const
1.临时变量:只有当参数为const:并且实参类型正确,但不是左值||实参类型不正确,但可以转换。
a,b,7都可以被打印,因为此时创建了临时变量。如果我们引用函数的目的是修改参数,为了保护参数,创建临时变量阻止修改,类似于值传递的副本。一般修改操作时,编译器会报错。例如:
2.引用用于结构。
引用用于结构时,会更加方便,并且节省大量内存。
我们创建了一个较大的结构。如果按值传递,会产生一个副本,消耗大量内存,且无法对原数据修改,此时使用引用,节省内存且方便。
2.1 返回引用。
常规返回时,和值传递一样,会生成一个值,并且将其短暂储存等待调用。如果返回的值太大,比如结构体。那么我们返回引用,直接把返回内容修改到原结构上。可以节省内存。我们应该注意:不要返回一个已经不存在的变量的引用,例如:在函数内创建的临时变量。我们最好返回一个形参的引用,或者使用new来开辟一个空间,这样返回该空间的引用。但是注意,这种方法容易忘记用delete来删除空间,因此会一直存在。应该小心使用。
3.对象,继承和引用
只需要记住,基类的引用可以直接指向派生类,而无需转换。比如:ostream & a,可以直接指向ofstream;
最后
以上就是迅速小熊猫为你收集整理的c++内联函数,引用基础知识点总结的全部内容,希望文章能够帮你解决c++内联函数,引用基础知识点总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复