第九章 内联函数

在C中,保持效率的方法是使用宏(macro),宏的实现时依靠预处理器而不是编译器。预处理器直接用宏代码代替宏调用,这样子就没有了参数压栈等开销。但是在c++中,使用预处理宏有两个问题:

1.宏看起来像函数调用但是不总是这样,这样就隐藏了难以发现的错误。

2.预处理器不允许访问类的成员函数,这意味着预处理器宏不能用作类的成员函数。

这样就引出了内联函数。。。。。。。。。

预处理器的缺陷:

1.当参数在宏展开的时候,如 #define FLOOR(x,b)    x>=b?0:1

if(FLOOR(a&0x0f,0x07))  如果展开的话即为 if(a&0x0f>=0x07?0:1)//运算符优先级不一样


2,当在宏中使用一个参数,都对这个参数求值。如: #define BAND(x)     (((x)>5 &&(x)<10)?(x):0)

/

for(int i=4; i<11; i++){

int a=i;

cout<<"BAND(++a)="<<BAND(++a)<<endl;

cout<<"\ta="<<a<<endl;

}

a 自增影响到参数,


任何在类中定义的函数都自动的称谓内联函数,也可以使用inline使之成为内联函数。

一般吧内联函数定义在头文件中,编译器看到这个定义时,会把函数类型(函数名字和返回值)和函数体放到符号表。

内联函数处于一种特殊状态,因为在头文件中声明该函数,所以必须包含头文件和该函数的定义,这些定义在每个用到该函数的文件中,但是不会出现产生多个定义错误的情况(不过,在任何使用内联函数地方该内联函数的定义都必须是相同的)。


容许读或者修改对象状态--即一个或几个内部变量的函数叫做访问函数,又分访问器和修改器    如  void SetValue(int a){value = a;}   int GetValue() const {return value;}


localtime    gmtime  asctime  ctime

localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间 。

struct tm *localtime(const time_t *clock);

asctime是把时间换成ascii码。 ctime是把时间转换成字符串.

time_t  和 struct tm


小函数作为内联函数是理想的,但是大的函数话很可能性能上得不到改善


有两种情况编译器不能直行内联:

1. 任何种类的循环都是被认为太复杂而不扩展为内联函数

2.要显式或者隐式地取函数地址的时候,编译器也不能执行内联。

c++规定,只有在类声明结束之后,其中的内联函数才会被计算,因此函数的成员函数可以向前引用。如:

class Forward{
	int i;
	public:
		Forward():i(0){};
		int f() const {return g()+1;}
		int g() const {return i};
}


我们几乎总是希望使用内联函数代替预处理器宏,然而当需要在标准C预处理器里使用3个特殊特征时却是例外:字符串定义、字符串拼接和标志粘贴。

字符串定义的完成是用#指示,它容许取一个标识符并把它转化为字符数组。

字符串拼接在当两个相邻的字符串没有分隔符时发生。

#define DEBUG(x) cout<<#x"="<<x<<endl;

#define TRACE(x) cerr<<#s<<endl; s

如果是标志粘贴,则使用"##"实现。实质就是把两个连接起来。!

#define FILED(a)  char* a##_string;int a##_size






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值