计算机 · 2021年5月26日 0

C++ inline关键字

指定函数为inline

在函数的定义处加上inline关键字,函数声明的地方不需要加inline声明。并且函数的定义也必须放在头文件里(除非这个函数定义也放在调用的那个cpp文件里),否则编译器不会内联代码,还是按照普通函数调用。

如果类成员函数的定义就在类的定义的代码块里,那么这个成员函数是自动实现为inline函数,此时不需要inline关键字。如果类成员函数的定义和声明分开了,那么需要在定义的地方加上inline关键字,而且定义也必须放在头文件里(除非这个成员函数定义也放在调用的那个cpp文件里)。

class Fred {
public:
  void f(int i, char c)
    {
      // ...
    }
};

即使指定了inline关键字,编译器也不一定实现为内联。

inline不一定有速度、代码大小之类的预期效果,要看具体应用场景。

https://isocpp.org/wiki/faq/inline-functions

inline不能成功的情形:

Note that certain usages in a function definition can make it unsuitable for inline substitution. Among these usages are: variadic functions, use of alloca, use of computed goto (see Labels as Values), use of nonlocal goto, use of nested functions, use of setjmp, use of __builtin_longjmp and use of __builtin_return or __builtin_apply_args.

编译时加上-Winline参数,对标记了inline,但是编译器不能实现为inline的函数发出告警。

https://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline