一、inline 回顾过去
inline 只能用于函数名字之前, 用来建议编译器将被修饰的函数在使用处展开,来解决参数入栈出栈的开销。
它提供了两个保证:
1、在所有的用到被inline 修饰的函数的源文件中,其函数的定义都是相同的。
2、被inline修饰的函数必须在每一个源文件中都有一个定义。(不论展开不展开)。
二、C++17 中的 inline
inline 除了修饰函数之外,还可以修饰变量。在某些头文件中,你可以有如下的写法:
class MyClass{
inline static std::string name = "My class.";
};
inline MyClass my_class;
三、用处
在C++17 之前,当我们想在多个源文件(cc/cpp/c)中使用同一个变量、函数、类的静态变量。我们不得不按以下的方法来处理。(我们有三个文件。inline.h/ inline.cc/ main.cpp, 想在inline.cc 和main.cpp中使用相同的变量、函数、类的静态变量)
1、变量
只能在头文件中声明,在其他源文件中定义。
inline.h:
extern std::string before_cpp17;
void ShowText();
inline.cc
std::string before_cpp17 = "this is old style.";
void ShowText(){
std::cout << before_cpp17 << std::endl;
}
main.cc:
int main() {
std::cout << before_cpp17 << std::endl; before_cpp17 += " append change something.";
ShowText();
return 0;
}
错误的用法:
inline.h :