4、函数相关知识点

本文详细介绍了C++中的函数特性,包括函数声明、回调函数、默认参数、内联函数等,并解释了函数指针的定义及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数基础知识

1、if(x)只会作用于紧跟在后面的第一条语句。

if(x)

a++;

b++;

b++不在if(x)的作用域中。

2、函数声明提供了函数到编译器的接口,声明时将函数参数类型、个数和返回值类型告知编译器,但不分配内存。函数地址是存储该函数翻译后的机器语言的内存首地址。局部变量存储在栈中,先进先出,栈变大或者变小。

3、使用Pow函数时,需要包含math.h头文件。利用Pow函数可以直接求数的次方,我们可以知道函数有两个参数,第一个参数为底数,第二个参数为指数,分别将代表的变量放入函数中。

4、参数使用引用,速度快,内存占用少。 

5、const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。const 在返回类型前面:表示函数的返回值是一个常量,不能被修改。const放在成员函数后面(void getValue const();):常量成员函数不会改变成员变量的值。

6、函数声明时只写参数类型,不写形参,是合法的。只需在实现的时候加上形参即可。

复杂函数

1、回调函数只能是全局函数或者静态成员函数

声明函数指针:

typedef(*func)();

func fc;

示例:

1)A类中.定义一个函数指针,如typedef void (*func_ptr)(std::string str);

2)A类中定义一个注册回调函数 void SetCallback(func_ptr fc_ptr);其中 func_ptr 是一个函数指针类型,之后会把一个回调函数地址(函数名func)赋值给 ptr

3)B类中定义一个 回调函数 void func(std::string str),需要注意的是,回调函数必须和前面定义的函数指针参数类型和参数个数一致。然后通过注册回调函数把B类函数指针传给A类,A类通过函数指针实现B类中函数的调用。在B类中执行:A a; a.SetCallback(func);

2、默认参数:在C++中,声明函数而不是定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。函数中的默认参数只在声明中赋初始值,不需要在定义中赋初始值。

3、内联函数编译器将指定的函数体插入并取代每一处调用该函数的地方,从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。

4、在Linux下,sleep()单位为秒,usleep()里面的单位是微秒。在Windows系统中,sleep()单位为毫秒。
通过clock()和gettimeofday()检查一段代码执行花了多少时间。clock()返回程序到目前的CPU(如果一段代码大部分时间是在sleep或者等待I/O,那么他的CPU时间是非常短的)执行时间,这个值需要除以CLOCKS_PER_SEC才能得到真正的用户时间,即秒。gettimeofday()得到真实的时间,精确到微秒。

5、当函数A作为函数B的参数时,参数类型不一定非得是函数指针,函数B的参数类型也可以是函数A的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值