特殊用途语言特性:默认实参,内联函数和constexpr函数,调试帮助

重点:

1.三种函数相关的语言特性:默认实参,内联函数和constexpr函数。

2.默认实参:某些函数有一种形参,在函数的很多次调用中它们都被赋予一个相同的值。

3.一旦某个形参被赋予了默认值之后,它后面的所以形参都必须要默认值。

4.若想使用默认形参,只要在调用函数时省略该实参即可。

TipWindow = screen ( , , ? );//错误:只能省略尾部的实参!

5.对于函数的声明来说,习惯将其放在头文件当中,在给定的作用域中一个形参只能赋予一次默认实参。

NOTE:通常,应该在函数声明中指定默认实参,并将该声明放在适当的头文件当中。

6.一次函数调用:调用前要保存寄存器,并在返回时恢复,可能需要拷贝实参,程序转向一个新的位置继续执行。

7.内联函数(inline):消除函数运行时的开销。

NOTE : 内联说明只是编译器提出的一个请求,编译器可以选择忽略这个请求。

8.内联机制用于优化规模较小,流程直接,频繁调用的函数。

9.Constexpr函数:是指能用于常量表达式的函数。

   定义constexpr函数:函数的返回类型以及所有形参的类型都是字面值类型(算术类型:整型和浮点型,引用和指针,string不包含),

 函数体中必须有且只有一条return语句。

10.为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。

11.constexpr函数不一定返回常量表达式。

12.对于某个给定的内联函数或者constexpr函数,它的多次定义必须完全一致,基于此,内联函数和constexpr函数通常定义在头文件当中。

13.当应用程序编写完成准备发布时,要先屏蔽掉调试代码,这种方法用到两项预处理功能:assertNDEBUG

14.Assert是一种预处理宏,其实就是个预处理变量,行为类型与内联函数:assert(expr); expr0assert输出信息终止程序,expr0assert什么都不做。

15.预处理名字有预处理器非编译器管理。

16.和预处理变量一样,宏名字在程序中唯一。

17.Assert的行为依赖于一个名为NDEBUG的预处理变量的状态。如果定义了NDEBUG,则assert什么都不做,如果没有定义NDEBUG,此时assert将执行运行时检查。

 

 

 

 

posted @ 2016-08-19 21:41  Widereye  阅读(208)  评论(0编辑  收藏  举报