关于c++的inline内联函数

内联函数

在C++中宏函数的概念是使用内联函数来实现的,而无论从哪一方面来说,内联函数都是真正的函数。唯一不同之处是内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。

任何在类中定义的(在花括号内)函数会自动地成为内联函数;

  • 开栈的开销 > 执行的开销 建议设为inline
  • 开栈的开销 < 执行的开销 不建议 代码膨胀

注意事项

  1. 对于那些函数体代码量很小,又经常调用的函数,一般用作内联函数。因为函数体代码很小,函数体执行的时间远小于调用函数的时间,从而提高代码执行效率。

  2. 一般建议少用宏定义,改用内联函数。因为宏定义容易出错(如边界错误),而且宏定义只是编译时简单的替换,而内联函数含有类型安全检查和自动类型转换,这些是宏定义没有的。宏定义还有另一个缺点:无法操作类的私有数据成员。

  3. 内联支持调试,宏定义不支持调试(assert除外)。宏定义只是简单的替换,内联在debug时相当于普通函数,此时并没有真正的内联,可以参与调试,在release时,才真正内联。 debug不是

  4. inline关键字是“定义型关键字”,inline只有写在定义前时,才是内联函数,如果inline仅写在声明前,而定义前没有的话,不算内联。

  5. 内联定义一般写在头文件中,若写在源文件中,只能给本源文件使用。若其他源文件要使用,需重写下内联函数的定义,才可使用。而且两源文件中内联函数的定义必须相同。

  6. 成员函数实现放在头文件中才会是默认内联函数,如果没有放在放在头文件中则不会默认是内联。

  7. 内联与否,只是你的建议,是否真正内联,得看编译器的意思,写了inline,或者你把类方法实现写在头文件,意味着你希望编译器帮你内联,但是是否真正内联,要看编译器,如果你的内联函数写得很复杂,编译器不一定会帮你内联。

  8. 一个函数若声明inline,则每处声明都必须保证是inline

猜你喜欢

转载自blog.csdn.net/ifwecande/article/details/107930502