C++Primer(第五版)学习笔记——函数指针和函数的特殊语言特性(第六章)

默认实参:

一旦某个形参被赋予了默认值,他后面的所有形参都必须有默认值。

调用含有默认实参的函数时,可以使用任意个数的参数,默认实参负责填补函数缺少的尾部实参。

在给定的作用域中一个形参只能被赋予一次默认实参,不能修改一个已经存在的默认值。(即使默认值相同也不行

用作默认实参的名字在函数声明所在的作用域内解析,而这些名字的求值过程发生在函数调用时

int wd =80;
cahr def = ' ';
string screen(sz = wd , char  = def);
void f()
{
   def = '*';
   int wd = 100;
   window  = screen();
}

本例中,在函数体内,改变了def的值,默认实参的值更新;声明了一个局部变量隐藏了wd,默认实参不更新。

内联函数:(没搞懂)

将函数指定为内联函数,通常就是将他在每个调用点上“内联的”展开(什么是内联的展开?)

内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求(什么时候编译器选择忽略?)

一般来说,内联机制用于优化规模较小、流程直接、调用频繁的函数。很多编译器都不支持内联递归函数。

constexpr函数:(没搞懂)

constexpr函数是指能用于常量表达式的函数。

函数的返回类型及所有形参类型都得是字面值类型,而且函数体中必须有且只有一条return语句。

constexpr函数被隐式的指定为内联函数。

constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作(?)

constexpr函数不一定返回常量表达式。(?)

内联函数和constexpr函数可以多次定义,但是它的多个定义必须完全一致。(?)

函数指针:

要想声明一个可以指向该函数的指针,只要用指针替换函数名即可:

bool (*p) (string );     //指针两端的括号必不可少
当我们把函数名作为一个值的时候,该函数自动转换成指针:

用函数名给指针赋值。

用函数名作为形参、实参

函数可以返回一个函数指针,但是此时,编译器并不会自动的将函数返回类型当成对应的指针。

 在指向不同函数类型的指针之间不存在转换规则,但是可以给指针赋一个nullptr或者字面值0.

要注意的一点是对一个函数使用decltype时,并不会获得对应的指针,而仅仅是函数的类型。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值