inline函数复习
在C++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。
inline函数在被调用的地方,实际上是把函数体的代码部分重复了一遍,而不是象普通函数那样将参数压栈,然后call ....,这样做可以减少函数的调用时间,提高程序执行的效率,但是如果有很多地方调用,程序将会很大,因为函数体被重复了许多遍。
inline函数必须被放在头文件中。因为,只有这样,当改动了其实现时,所有调用它并展开它的调用点才能正确嵌入其函数体。
以下是Essential C++中的原话:
为了能够扩展Inline函数的内容 ,在每个调用点上,编译器都得取得其定义。这意味着我们必须将inline函数的定义置于头文件,而不是把它放在各个不同的程序代码文件。
我的理解是:在多文件程序中,由于inline函数可能会被编译器插入到每个文件里面,所以如果把inline函数放在某个cpp文件中,编译器可能不能找到这个inline函数而出错,但如果放在头文件中,由于编译器总是先处理所有的头文件,所以能先找到inline函数的定义。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。
inline函数在被调用的地方,实际上是把函数体的代码部分重复了一遍,而不是象普通函数那样将参数压栈,然后call ....,这样做可以减少函数的调用时间,提高程序执行的效率,但是如果有很多地方调用,程序将会很大,因为函数体被重复了许多遍。
inline函数必须被放在头文件中。因为,只有这样,当改动了其实现时,所有调用它并展开它的调用点才能正确嵌入其函数体。
以下是Essential C++中的原话:
我的理解是:在多文件程序中,由于inline函数可能会被编译器插入到每个文件里面,所以如果把inline函数放在某个cpp文件中,编译器可能不能找到这个inline函数而出错,但如果放在头文件中,由于编译器总是先处理所有的头文件,所以能先找到inline函数的定义。