指定函数为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 ofsetjmp
, use of__builtin_longjmp
and use of__builtin_return
or__builtin_apply_args
.
编译时加上-Winline参数,对标记了inline,但是编译器不能实现为inline的函数发出告警。
近期评论