码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-19 22:10:52      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

重点:

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将执行运行时检查。

 

 

 

 

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

标签:

原文地址:http://www.cnblogs.com/YH-shjd-senvn/p/5789031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!