【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)函数体内循环,那么执行的时间也会比函数调用的时间大。

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

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

【C++基础之一】静态变量的分配空间与LNK2001错误

今天写一个单例类,在使用静态变量的时候发现了一个之前没有注意到的问题,这里总结并记录一下。 先看这个单例类: Singleton.h #pragma once class CSingleton { ...

【C++基础之十一】虚函数的用法

虚函数的作用和意义,就不进行说明了,这里主要讨论下虚函数的用法。 1.典型的虚函数用法 可以看到,只有标识为virtual的函数才会产生多态的效果,而且是编译多态。它只能借助指针或者引用来达到多态...

C++基础学习笔记----第三课(内联函数、默认参数、占位参数)

主要说明从C到C++函数的一些变化,内联函数主要说了内联函数的产生和编译器的编译等,默认参数和占位参数是C++为了开发者的方便而产生的,这部分知识整体来说理解起来不是很困难,但是比较琐碎,而且需要记住...

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

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

C++基础--内联函数

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

[C++基础]宏定义、内联函数、普通函数的区别

转载自:http://blog.csdn.net/gao675597253/article/details/7397373 用内联取代宏: 1.内联函数在运行时可调试,而宏定义...

c++ 内联函数(一看就懂)

1.内联函数在C++中我们通常定义以下函数来求两个整数的最大值:int max(int a, int b) { return a > b ? a : b; }为这么一个小的操作定义一个函数的好...

c++快速简易入门教程_011内联函数

内联函数是C++为提高程序速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将他们组合到程序中。要了解内联函数与常规函数的区别,必须深入到程序内部。     ...

c++中得内联函数和宏定义

在c++中内联函数是对宏定义一种改造,因为利用内联函数取代宏定义得好处是:  1、可进行类型安全检查或自动类型转换、   例如:在c语言中,常用预处理器语句#define来代替一个函数定义。例如:  ...

C++内联函数(inline)和宏的比较及用法

本文转载于网络,但却无法知道确切的来源,特此说明!              介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++基础之十五】内联函数
举报原因:
原因补充:

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