我们都知道 inline 也叫内联函数 ,
1、为什么需要inline
内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数,内联函数是C++的增强特性之一,用来降低程序的运行时间。当内联函数收到编译器的指示时,即可发生内联:编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段,值得注意的是,内联函数仅仅是对编译器的内联建议,编译器是否觉得采取你的建议取决于函数是否符合内联的有利条件。如何函数体非常大,那么编译器将忽略函数的内联声明,而将内联函数作为普通函数处理。
2、inline 和 define 区别
#define int uInt 宏定义,其实就是一个别名,给原始的变量另外起一个名字,当在程序编译时,会将宏定义进行展开调用,所以一般宏定义要设计的小巧一些,否则运行效率会降低折扣
3、书写要点
常用于类中,如下实现,inline 的定义和实现都需要在类内部且实现要小巧,代码不造成堆积,如果函数体过大,则编译器会采用普通函数进行处理
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
///静态全局变量 限制文件作用域 当前文件
static int g_result = 0;
class chang {
public:
chang() = default;
~chang() = default;
///修饰类传数 一般配被 & 意志传递进入的参数不被函数所修改,即不允许修改
inline bool setValue(const int& va) {
static int result = va;
m_value = va;
g_result = m_value;
return true;
}
/// 修饰函数,表示不能修改类中数据成员也不能调用类的成员函数
inline int getValue() const {
return this->m_value;
}
static int getResult() {
return g_result;
}
void printfThis()
{
std::cout << " this:" << this << std::endl;
}
private:
/// 用muteable 修饰以允许该成员可以在常量函数中被修改
mutable int m_value;
};
由于本人经验有限制,如有错误,欢迎修正