20200917 effective cpp inline

Inline!一旦被Inline修饰了的函数,它就再也不是函数了!(如果它真的被编译器内联了的话,然而不一定修饰inline之后就会被内联)

inline的位置

我们知道inline会导致代码替换。

所以inline的函数一定要放在头文件里,别人include了这个头文件了,才可以被替换。

隐喻inline

一旦函数被定义在类体内,就是隐喻inline。比如:

1
2
3
4
5
6
7
8
class Person
{
public:
void Eat()
{
// Eat Something
}
}

虽然上面的Eat()没有明写inline,但是被隐喻了。

inline的问题

  • 内联函数可能导致代码膨胀
  • 内联函数一旦被改变,所有使用到它的目标文件都必须重新编译(因为inline的本质是替换代码)

什么时候编译器会忽视inline

并不是所有被inline修饰的函数都会变成内联函数。这些情况下编译器不会让它们成为内联函数:

  1. 某个程序要取inline函数的地址时。因为编译器必须为此函数生成一个outlined函数本体
  2. 构造和析构函数不能称为内联函数
Buy Me A Coffee / 捐一杯咖啡的钱
分享这篇文章~
0%
//