C++小细节4-函数2

本文介绍了C++中的内联函数,解释了其工作原理和与宏定义的区别。接着讨论了左值和右值的概念,并提醒了返回引用或指针函数时应注意的问题。此外,阐述了为何使用引用参数以及何时选择值传递、引用或指针传递。最后,简要探讨了函数重载和作用域的作用。
摘要由CSDN通过智能技术生成

04/21/2020

C++内联函数

内联函数:编译器将使用相应的函数代码替换函数调用,程序无需跳转到另一个位置处执行代码,再调回来。因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多的内存。1

  • 函数声明或者定义前加上inline关键字
inline void test()
{
	cout << "inline function";
}
int main(){
	test();
	test();
	return 0;
}
//replace inline 
int main()
{
	{
		cout << "inline function";
	}
	{
		cout << "inline function";
	}
	return 0;
}
  • 内联和宏定义区别

    • 内联按值传递,宏不是
    • 宏是通过文本替换来实现的
#define SQUARE(X) X*X
#define SQUARE2(X) ((X)*(X))
cout << SQUARE(4+3); //19; is replaced 4+3*4+3

引用

左值和右值

  • 左值参数是可被引用的数据对象,例如,变量、数组元素、结构成员、引用和解除引用的指针。
  • 右值引用:常量和表达式
  • 简单了解“=“号左边叫左值,右边叫右值。

返回引用的或者指针的函数注意的问题

  • 函数返回一个指向临时变量的引用,函数运行完毕后它将不在存在,与返回指针一样性质。

为何使用引用参数

  • 提高程序运行速度
  • 在函数中改变实参

什么时候用值传递,引用或者指针传递

  • 数据对象小,用值传递

  • 数据对象是数组,用指针,这是唯一的选择

  • 数据对象是较大的结构,使用const指针或者const引用

  • 数据对象是类对象,则使用const引用,C++新特性加入引用的原因
    函数重载
    函数名字相同下:

  • 参数列表数量不同或者参数类型不一致

  • 返回类型不一致不属于函数重载

函数重载的作用

  • 函数重载减轻命名的痛苦,但是也有可能写出混淆概念的函数。

作用域[^2]

  • 作用域通常以一组花括号(“{}”)为标志。一个块就是一个作用域
    • if,while等控制流作用域,有函数体作用域,类声明作用域,命名作用域等等
  • 块中引入的名字只能在块内部以及嵌套在块中的子块访问
  • 在局部块作用域中,声明函数是不好的。最好在全局中声明。
  • 嵌套作用域规则:如果内部作用域和外部作用域都有声明话,在内部,先找内部的,外部被隐藏,如果内部没有,再去找外部的。
  • C++语言中,名字查找发生在类型检查之前,如果我在内部作用域找到了某个函数声明,外部的将会被隐藏,然后针对这个函数检查形参的的类型。
void print(string);
void func()
{
	void print(int);
	print("Hello world"); //报错,先找到最近print,外部的print被隐藏了,所以形参不兼容。
}

  1. C++ primer plus 第六版 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值