C++Primer 6.5节——特殊语言用途(内联函数和constexpr函数)

C++Primer 6.5节——特殊语言用途(内联函数和constexpr函数)

一、内联函数
1、内联函数的作用
①将函数指定为内联函数,通常就是将它在每个调用点上“内联”地展开成具体的代码。
②加快程序的运行速度。

2、内联函数的定义:在函数的返回类型前面添加上inline关键字。

二、constexpr函数
1、constexpr函数的定义
①contexpr函数是指能用于常量表达式的函数。
②注意:函数的返回类型及所有形参的类型必须都是字面值类型,且函数体内必须有且只有一条return语句。
③字面值类型:算数类型,指针和引用。
④constexpr函数被隐式指定为内联函数。
⑤constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作就行。
⑥允许函数的返回值是一个非常量。
(1)当函数的实参是常量表达式,则其返回值也是常量表达式。
(2)当函数的实参不是常量表达式时,则其返回值是一个非常量表达式。

2、把内联函数和constexpr函数放在头文件内
①和其他函数不同,内联函数和constexpr函数可以在程序定义多次,但是它们的多个定义都必须相同。
②基于①的原因,内联函数和constexpr函数通常定义在头文件中。

三、调试帮助
1、选择性地执行调试代码
①基本思想:程序在开发过程,需要使用到一些调试代码。这些调试代码只在开发过程中使用,所以在程序完成并准备发布时,需要屏蔽掉这些调试代码。
②方法:使用两项预处理功能:assert和NDEBUG

2、assert预处理宏(预处理变量)
①定义:assert(expr);
(1)首先对expr求值,如果expr的值为假(即0值),assert将输出信息并终止程序的执行。
(2)如果expr的值为真(即非0值),assert将不执行任何操作。
②和预处理变量一样,宏名字在程序内必须唯一。
③assert通常检查“不能发生”的条件。
④assert的作用:调试代码。

3、NDEBUG预处理变量
①assert与NDEBUG的关系
assert的行为依赖于NDBUG预处理变量的状态。
(1)如果定义NDEBUG,assert不执行任何操作。
(2)如果没有定义NDEBUG,此时assert将执行运行时检查。
②NDEBUG的作用:定义NDEBUG能够避免检查各种条件所需的运行时开销,当然此时并不会有任何的运行时检查。
③除了用于assert外,也可以使用NDEBUG来编写自己的条件调试代码。
(1)如果没有定义NDEBUG,将执行ifndef和endef之间的代码。
(2)如果定义了NDEBUG,将跳过ifndef和endef之间的代码。

4、程序调试的名字
①_ func _ //存放函数的名字
②_ FILE _ //存放文件名的字符串字面值
③_ LINE _ //存放当前行号的整型字面值
④_ TIME _ //存放文件编译时间的字符串字面值
⑤_ DATE _ //存放文件日期的字符串字面值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值