【C++ 重要知识点总结】 函数基础、参数传递、返回类型和 return 语句、函数重载、 特殊用途语言特性、函数匹配、函数指针

函数

1 函数基础

构成

  • 返回类型、形参列表、函数体

  • 使用调用运算符来执行函数,传入实参列表。

  • 编写函数

  • 调用函数

    • 主调函数和被调函数。程序的控制权由主调函数交给被调函数。
    • return 语句返回。程序的控制权由被调函数返回给主调函数
  • 形参和实参

    • 没有规定实参的求值顺序,默认是从右向左。

局部对象

  • 形参和函数体内部定义的变量同城局部变量
  • 局部变量会屏蔽外部同名的变量。
  • 自动对象。运行时自动创建,栈函数运行完时自动释放。只存在于块执行期间的对象是一种自动对象。
  • 局部静态带向。初始化全局静态数据段。直到程序终止才会被销毁。

函数声明

  • 在头文件中进行函数的声明。

分离式编译

  • 把程序分离到多个文件中去。每个文件独立编译。
  • 最后链接各个独立编译的文件

2 参数传递

值传递

  • 初始值被赋值给形参。但是形参的修改无法改变原来变量的值。
  • 指针也是值传递,拷贝的是指针的值。通过指针能够修改原来的对象。即修改指针指向的值,但是原来指针的值依旧不能修改。

引用传递

  • 传递原来变量的引用,修改会直接引起原来变量的变化。
  • 感觉使用引用传递要通过指针地址的值传递快多了。
  • 引用传递还能帮我们一次返回多个结果。
  • 如果形参不需要修改原来实参的值,需要传递常量引用。

数组形参

数组的两个性质

  • 不能直接 copy 数组
  • 数组使用时通常会转换成指针

即相当于传递了指向原来的数组的指针。

main 处理命令行选项

int main(int argc,char **argv){

}

可变参数

C++中使用 initializer_list 类实现多个参数的传递。也是一个容器类,可以返回迭代器。

【C++ 重要知识点总结】 函数基础、参数传递、返回类型和 return 语句、函数重载、 特殊用途语言特性、函数匹配、函数指针_第1张图片

3 返回类型和 return 语句

无返回值的函数。

void fun(){

return;//可以省略,不返回任何东西。

}

有返回值的函数

  • 返回值将会被 copy 到调用地点。
  • 函数内指针指向的局部变量会销毁。返回后便不可引用。
  • 不要返回局部对象的引用或指针。
  • 通过形参的引用变量返回值。
void hello(int &a){
    a=10;
}
  • 列表初始化返回值。

vector process()
{
return {“function”,“hello”}
}

原来 C++11 中添加大括号进行初始化的主要目的,就是返回多个值啊。但是返回值类型还是必须相同的。也就是说可以使用中括号进行复制列表初始化。

返回数组指针

4 函数重载

定义重载函数

  • 如果同一个作用域的几个函数名字相同但是形参列表不同,则成为函数重载。
  • 可以通过 const 来区分重载了哪个具体的函数。

调用重载函数

  • 函数匹配
  • 重载确定

重载与作用域

  • 函数外部的重载函数可能被局部同名变量屏蔽掉。

5 特殊用途语言特性

默认参数

  • 实参按位置解析,默认参数填补缺少的尾部实参。

内联函数

  • 普通的函数调用操作系统需要开单独的空间,保护寄存器状态。
  • 内联函数相当于常量,可以直接替换使用到内联函数的地方。直接嵌入到函数调用的地方。

constexpr 函数

  • 用于常量表达式的函数。

  • 函数的返回值及所有的形参的类型都是字面值常量

  • 函数中只有一条 return 语句。

  • 保证函数在编译过程中能够直接计算结果。

assert 预处理宏

assert(expr);
  • 预处理变量,使用表达式作为条件。
  • 程序执行过程中,如果表达式为真,则 assert 什么也不做。如果表达式为假,则输出信息终止程序。

6 函数匹配

  1. 选定本次调用对应的重载函数集,集合中的函数称为候选函数。候选函数的特点:与被调用的函数重名;声明在调用点可见。
  2. 选出能被实参调用的函数,称为可行函数。实参与形参的数量相等;实参与形参对应的类型相同。
  3. 默认参数的重载函数优先级,高于,类型转换的重载函数的优先级。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wq2BtWwj-1689840824828)(image/2021-03-04-22-45-04.png)]

7 函数指针

定义函数指针

  • 函数指针指向的是函数,而非变量或对象。函数指针指向某种特定的类型的函数。函数的类型由它的返回值类型和形参类型共同决定,与函数名无关。
bool lengthCompare(const string &,const string &);
bool (*pf)(const string &,const string &);
//*pf两端如果没有括号,则指针是指向返回值的指针。
//两个函数是等价的

使用函数指针

  • 当把函数名作为一个值使用时。函数自动的转换成指针。
pf = lengthCompare;
pf = &lengthCompare;//两者是等价的。
pf = 0;//pf不指向任何函数
pf = nullptr;//pf不指向任何函数。
  • 在多个重载函数中,pf 的类型必须指向特定的某个重载函数。

你可能感兴趣的:(c++,java,开发语言)