【C++基础之十五】内联函数

原创 2013年09月26日 17:32:26

1.优点

为什么使用内联函数,而不使用宏定义,虽然宏本身采用的展开来替代函数调用的压栈出栈返回等操作,提高了代码的效率,但是会有两个问题:

(1)边际效应

宏只是展开代码而已,所以在一些操作符的优先级问题使用上很容易出现异常。

#define ADD(x,y) x+y;

int _tmain(int argc, _TCHAR* argv[])
{
	cout<<3*ADD(1,2);
	return 0;
}
原意是要输出9,而实际上由于直接展开的关系,输出值为5。

(2)无法操作类的私有变量


2.原理

对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。


3.实现


3.1.inline声明

inline声明应该修饰在函数的定义,而不是函数的声明。

class A
{
public:
	void f();
};

inline void A::f()//在定义中添加inline修饰符
{
	cout<<"f()";
}

int _tmain(int argc, _TCHAR* argv[])
{
	A a;
	a.f();
	return 0;
}


3.2.定义在类内的成员函数自动为内联函数

尽管没有inline修饰符,在类内进行定义的成员函数也是内联函数。

class A
{
public:
	inline void f(){cout<<"f()";};//类内定义自动为内联函数
};
int _tmain(int argc, _TCHAR* argv[])
{
	A a;
	a.f();
	return 0;
}

4.注意

那既然内联函数能提高效率,怎么不把所有的函数定义为内联?

注意,内联函数可以节省函数调用花费的时间,但是它是以代码复制为代价的,如果花费在函数体内的时间大于函数调用的时间,那是得不偿失的。

以下两种情况,慎重内联函数:

(1)函数体代码很长,每一处的内联都要进行代码的复制,对内存和速度消耗都是很大的。

(2)函数体内循环,那么执行的时间也会比函数调用的时间大。

正常情况下编译器会自动取消不值得内联的函数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储

cocos2d-x之微信打飞机实战演习,原滋原味的微信打飞机源码分享。

cocos2d-x游戏得分显示

1、在程序.h文件中定义一个分数 int score=0;2、在.cpp文件中添加一个分数层 //添加一个分数层 auto layer_score=Label::createWith...

Cocos2d-js06-添加分数和死亡判断

Cocos2d-js06-添加分数和死亡判断 1、添加分数,代码: //添加分数 score = new cc.LabelTTF("分数:0", "Arial", 50); score.setPo...

【基础C&C++】内联函数&宏定义

内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具...

C++基础--内联函数

inline函数 inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1...

C++的内联函数

影响性能的一个重要因素是内联技巧,内联函数也可以叫内嵌函数。 在C++中,函数调用需要建立栈环境,进行参数复制,保户调用现场,返回时,还要进行返回值复制,恢复调用现场。这些工作都是与完成特定的任务操...

C++中的内联函数

C++中存在一些具有特殊意义或功能的特殊函数,我们来简单介绍一下内联函数。 从软件工程的角度来看,我们通常将一个程序通过一组函数来进行实现,但是函数的调用涉及到执行时间的开销,如果有的函数需要频...

C/C++内联函数(inline)

C/C++提供了内联函数这个机制。 内联函数是向编译器建议:编译这个函数的时候直接把函数展开,而不是进行函数调用。但是这只是一个建议,编译器可能并不接受这个建议,仍然把它当做普通函数进行编译。 合理使...

c++ 内联函数 (讲解的TM真好)

1.  内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码如下: int max(int a, int b) {  return a > b ? a : b;...

C++内联函数

一、C++内联函数 inline(小心,不是online),翻译成“内联”或“内嵌”。意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)