[读书笔记] C++Primer (第5版) 第6章 函数

    读书笔记只记录了我从书中获取的新知识,已经掌握的部分会忽略不计了。

1. initializer_list形参:

    使用情况:函数实参数量未知,但全部实参类型相同。

    定义:一种标准库类型。用于表示某种特定类型的值的数组。

               同vector,它也是一种模板类型。其中的元素为常量值,不可修改!!

               也可以使用size(),begin(),end()函数。使用花括号传参。

2. 省略符形参:

    使用范围:便于C++程序访问  使用了varargs的C标准库的代码。

    只能用于形参列表的最后一个位置。

3. 函数的值如何返回:

    在初始化调用点的位置有一个临时量,即函数调用的结果。

    函数完成后,它所占用的存储空间也会随之被释放。所以要引用局部变量的引用或指针。

4. 返回数组指针:

    int *p1[10];       // 含有10个指针的数组

    int (*p2)[10];     // 一个指针,执行含有10个整数的数组

    声明:

    int (*func(int i))[10];

    使用别名:  typedef int arrT[10];      // 用arrT代表int [10]

    func可表示为:arrT* func(int i);

5. 尾置返回值:

     auto func(int i) -> int(*)[10];

 6. 函数重载:

     两个函数除返回值外,名称和形参全部相同,这样是不允许的。

     顶层const形参和一个没有const的形参无法区分来看。

     二义性调用:有多余一个的函数可以匹配,但是都不是最佳匹配,此时将发生错误。

    在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。因为函数名字查找发生在类型查找前。

7.内联函数:

    调用函数一般比执行相同的代码慢些。大多数机器上,调用一次函数要做的工作:调用前保存寄存器,并在返回时恢复。可能需要拷贝实参。程序转向一个新的位置继续执行。

     内联函数可避免调用的开销:内联函数将它每个调用点,“内联地”展开。相当于调用的位置直接使用了函数中的代码。

     适用于规模小,流程直接,调用频繁的函数。函数前加关键字 “inline”

     constexpr函数:返回值和所有形参都为字面值,函数中有且只有一个return。编译器把这个函数隐式地指定为内联函数。

                                在形参赋为非字面值时,返回值也是非字面值。

     内联和constexpr函数可以多次定义,但必须定义一致。通常定义在头文件里。

8.调试帮助:

     assert预处理宏:  它的行为依赖于NDEBUG(一个预处理变量的状态)。如果定义了NDEBUG,则assert什么都不做。

     _ _func_ _:const char类型,表示当前调试的函数名。

     _ _FILE_ _:存放文件名字面值

     _ _LINE_ _:当前行号字面值

     _ _TIME_ _:文件编译时间字面值

9.函数指针:

     函数指针指向函数,函数的类型由他的返回值和形参类型共同决定,与函数名无关。

bool (*pFunc)(int nA, int nB);      // pFunc为函数指针

pFunc = FuncA;         // 指向名为FuncA的函数

bool  b1 = pFunc(3, 9);    // 使用函数指针

函数指针可作为形参和返回值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值