C++ primer 笔记6. 函数

函数基础

实参:调用函数时为形参提供的初始值,与形参一一对应

局部变量:函数体内部定义的变量以及形参

自动变量:当函数的控制路径经过普通局部变量定义语句时创建该对象,当达到块末尾时销毁它

函数开始时为形参申请存储空间

局部变量定义不含初始值时执行默认初始化

局部静态对象:在程序执行路径第一次经过对象定义语句时初始化,程序终止时销毁

                         局部静态变量定义不含初始值时执行值初始化

分离式编译:支持将程序分割到不同文件,每个文件独立编译

                    1.生成可重定向文件  CC -c factMain.cc       # generate factMain.o

                    2.将多个.o文件链接在一起形成可执行文件  CC factMain.o fact.o -o main   #generate main.exe

 

 

参数传递

const参数:当用参数初始化形参时会忽略顶层const:

可以将非const实参传递给const形参;不可以将const实参传递给非const形参

数组形参:数组作为参数传递时,会转变成指针

  • 确定数组界限的方式:

        1. 如char*数组,结尾处有特殊符号界定

        2. 传递begin和end

        3.传递数组大小参数

数组引用形参:

多维数组形参:

main函数:使用argv参数时,需要从argv[1]开始,argv[0]保存程序的名字

initializer_list形参:不能修改initializer_list对象中元素的值

调用:

省略符形参:只能位于参数列表最后

 

 

返回类型和return语句

不能返回局部变量的引用:

引用返回左值:

列表初始化返回:

main的返回值:

尾置返回类型:

使用decltype:

 

 

重载

底层const可以参与重载,顶层const不可以参与重载

如果在内层作用域声明名字,将隐藏外层作用域中声明的同名实体(包括重载)

 

 

特殊用途语言特性

默认实参:后续声明可以为没有默认值的形参添加默认值,不能修改已有的默认值

内联函数:避免函数调用的开销,编译过程直接将调用处替换为函数内容

constexpr函数:能用于常量表达式的函数

       返回值和所有形参类型都是字面值类型

       函数体只有一条return

       constexpr函数被隐式地指定为内联函数

       当constexpr实参为常量表达式,它的返回值也是常量表达式;反之则不然

内敛函数和constexpr函数通常定义在头文件中

assert预处理宏:

DEBUG:

编译器定义的局部静态变量:

__func__  //函数名字

__FILE__  //文件名

__LINE__ //当前行号

__TIME__ //文件编译时间

__DATE__ //文件编译日期

 

 

函数匹配

如果有一个最优的,则返回。

如果有几个最优的并列,则报错

匹配优劣排序:

1.精确匹配

包括参数类型相同

数组/函数转换成指针

顶层const转换

2.通过const转换实现的匹配

3.通过类型提升实现的匹配

  short -> int

4.通过算数类型或者指针转换

  int -> unsigned int

5.通过类类型转换实现的匹配

 

 

函数指针

使用:

作为实参使用:

返回函数指针:

 

发布了59 篇原创文章 · 获赞 0 · 访问量 2855

猜你喜欢

转载自blog.csdn.net/I_ren/article/details/105679939