const, static, inline函数在类外定义时注意点讨论

类中定义成员函数(类或对象成员)常用到三种修饰符: const, static, inline,而我们知道在类中直接定义函数,将自动变为inline函数,一般内联函数是一些经常被调用的小型函数,因此很多函数我们还是会以类外定义的方式来定义,这时部分关键字仍然需要再次出现,本文针对上述3个关键字进行讨论。

首先给出个例子:

class Decl
{
public:
    Decl();//默认构造函数声明
    void fun_const();//普通函数
    void fun_const() const;//常量函数声明 与上面的构成重载
    static void fun_static();//类static函数声明
    void fun_inline_implicit(){}//内联函数的隐式定义,直接在类中定义
    void fun_inline_explicit();//内联函数声明,等待外部定义
};

Decl::Decl(){};
void Decl::fun_const(){}
void Decl::fun_const() const{}//需要增加const 区分重载
void Decl::fun_static(){}//类函数 不需要加static
inline void Decl::fun_inline_explicit(){}//外置inline 一定要加

具体说明:

1. const

const是表示常量的意义,修饰函数时是为了告诉编译器该成员函数不得修改成员变量。因此我们会在声明函数时,在函数末尾增加一个const进行修饰。那么当我们在类外定义该函数时,还是需要加上这个const,我认为原因在于这种const会引起重载,不同的const位置是否会引起重载的讨论可以相见我的另一篇转载博客:点击打开链接,因此我们为了区分重载函数,应当在类外定义时仍然添加const修饰符。


2.static

类函数,static声明的函数只允许定义一次,因此不存在重载等情况使编译器不知道该函数属于哪个,因此在声明时加了static后就不需要再加static了,否则反而会被认为是多重定义。


3.inline

内联函数的作用是让编译器将函数代码直接内嵌在调用处,因此inline修饰符不能离开定义,否则编译器会不知道该段函数代码是否需要内联。若直接在类内定义了一个函数,那么编译器会自动加上inline修饰符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值