C++17(3) : inline 变量

一、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 :

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值