类内定义的成员函数默认为内联函数,编译器将其展开以减少调用开销,适用于短小频繁调用的函数。

在C++中,内联成员函数(inline member function)用于减少函数调用开销,特别适合短小频繁调用的函数。编译器会尝试将函数体直接插入调用处,而不是进行常规的函数调用。
类内定义自动内联
在类内部直接定义的成员函数,默认被视为内联函数,无需显式使用inline关键字。
class MyClass { public: void show() { std::cout << "Hello!" << std::endl; } };
上面的show()函数虽然没有写inline,但因为定义在类内部,编译器会自动尝试将其作为内联处理。
类外定义需显式声明内联
如果成员函数在类外定义,想要成为内联函数,必须在类内声明或类外定义时使用inline关键字。
立即学习“C++免费学习笔记(深入)”;
class MyClass { public: void display(); // 声明 }; inline void MyClass::display() { std::cout << "Display called." << std::endl; }
也可以在类中声明时加上inline:
class MyClass { public: inline void display(); // 显式声明为inline }; void MyClass::display() { std::cout << "Display called." << std::endl; }
两种方式都可实现内联,关键是确保inline出现在函数定义的同一翻译单元中。
头文件中定义内联函数
由于内联函数在编译时需要被展开,其定义必须在每个调用它的源文件中可见。因此,类外定义的内联函数通常放在头文件(.h 或 .hpp)中,避免链接错误。
例如,在MyClass.h中完整定义:
// MyClass.h class MyClass { public: void func(); // 声明 }; inline void MyClass::func() { // 实现 }
这样所有包含该头文件的源文件都能看到函数体,满足内联要求。
基本上就这些。内联是一种优化建议,最终是否内联由编译器决定。合理使用可提升性能,但过度使用可能导致代码膨胀。不复杂但容易忽略的是:类外定义一定要记得加inline并放在头文件中。


