一、关键字static
回顾一下C++关键字——static:静态生存周期、静态数据成员、静态函数成员、单例模式
static
① 修饰普通变量 : 修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
②修饰普通函数:
表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。
③修饰成员变量:
修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
③修饰成员函数:
修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。
二、关键字inline
①相当于把内联函数里面的内容写在调用内联函数处;
②相当于不用执行进入函数的步骤,直接执行函数体;
③相当于宏,却比宏多了类型检查,真正具有函数特性;
④编译器一般不内联包含循环、递归、switch 等复杂操作的内联函数;
⑤在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数。
三、组合static inline <函数>
将C++函数声明为static inline
的好处包括:
-
编译时展开:
inline
关键字会告诉编译器在调用函数时将其内容直接插入到调用处,而不是通过函数调用的方式执行。这样可以减少函数调用的开销,提高程序的执行效率。 -
避免重复定义:将函数声明为
static inline
可以避免在多个文件中包含同一函数定义而导致的重复定义错误。static
关键字表示该函数只在当前文件中可见,避免了符号冲突。 -
减少代码大小:使用
inline
可以减少代码的大小,因为编译器会在每个调用点插入函数的代码,而不会生成单独的函数代码。 -
避免函数调用开销:由于函数被展开为代码,避免了函数调用的开销,特别是对于一些简单的、频繁调用的函数,可以提高程序的性能。
-
提高代码可读性:将函数声明为
inline
可以提高代码的可读性,因为函数的定义和调用点更加紧凑,更容易理解函数的作用。
需要注意的是,将函数声明为static inline
并不是适用于所有情况的,特别是对于一些复杂的函数或者函数体较大的情况,可能不适合使用inline
。此外,编译器并不一定会将所有声明为inline
的函数都进行内联展开,具体展开与否取决于编译器的优化策略。