函数指针
概念:函数也是有地址的,而指向这个地址的指针就是函数指针
1、获取函数的地址
使用函数名即可,例如think()是一个函数,则think就是该函数的地址。要将函数作为参数进行传递,必须使用函数名。
porcess(think); //passes address of think() to porcess(); porcess可以在内部使用think
thought(think()); //passes return value of think() to thought(); thought函数调用首先调用think函数,返回值传递给thought
2、函数指针的声明
声明函数指针,须指定指针指向的函数类型,即指明函数的返回类型和参数列表
例:
double pm(int);
double (*pf)(int);//其函数指针形式
pam()替换为了(*pf)
double *pf(int); 这样就表示pf()是一个返回指针的函数
double (*pf)(int) pf是一个指向函数的指针
将函数的地址赋值给指针 pam()函数的特征标(参数列表)和返回类型必须与pf相同才可以
pf=pam;
3、使用指针来调用函数
double y=pf(5); //两种形式都是可以的
double y=(*pf)(5);
内联函数
涉及关键字:inline
内联函数比普通函数运行稍微快一点,但是需要耗费更多的空间。
为什么运行要快一点?
函数在栈中进行调用,在main函数中,每次遇到一个函数,就需要跳转到该函数对应栈的位置进行使用。而内联函数不需要,内联函数类似于直接把代码块添加进main函数中,不需要跳转的时间(个人看书理解)。
class A
{
public:
void test()
{
cout<<"test"<<endl;//在类中声明并且定义的默认为内联函数,在类外定义需要加关键字inline
}
}
注:
即使我们加了inline关键字,最后它是否为内联函数也是编译器决定的,我们只是给它一个建议,如果函数块过大,即使声明为内联函数编译器也不会使得它成为内联函数。
decltype关键字
decltype关键字是为了