优秀的编程知识分享平台

网站首页 > 技术文章 正文

modern c++函数修饰符,限定符,说明符总结

nanyue 2025-01-20 15:36:28 技术文章 5 ℃

自c++11起,c++函数的修饰符增加了许多。在这里小小总结一下使用情况和使用顺序,以供参考。

按下图顺序讲解

  1. inline
    inline 修饰符将函数声明为内联函数以便编译期优化。要注意的是在类内定义的成员函数将默认是内联的。
  2. virtual(修饰成员函数)
    将成员函数声明为虚函数实现多态。注意inline virtual,虚函数是可以被内联的,前提是虚函数没有表现多态的时候,也就是编译器知道你要调用哪个类的对象。
  3. void
    函数返回值,略。
  4. f
    函数名,略。
  5. const 限定符(修饰成员函数)
    const限定符,只有 const 对象可以调用该函数。本质是,普通成员函数的第一个参数是一个隐式 this 指针,const 修饰后将该指针类型修改为 const this 指针。
  6. volatile 限定符(修饰成员函数)
    和上条相似,且可以和const限定符同时存在,略。
  7. & / && 引用限定符(修饰成员函数)
    c++11新增,当 & 修饰成员函数时,只有左值对象能调用该函数;当 && 修饰成员函数时,只有右值对象能调用该函数;
  8. noexcept 说明符
    c++11新增,告诉编译器该函数不会抛出异常,以便编译器做优化。要注意的是,编译器是不会检查你的异常说明是否正确。即函数说明了noexcept的同时又含有 throw 语句是可以顺利通过编译的。但是运行时会终止程序以遵守不在运行时抛出异常的承诺。
    在成员函数中,noexcept异常说明符需要在以上三个限定符之后,final、override之前。
  9. final 说明符(修饰成员函数)
    c++11新增,说明函数为最终实现,无法被子类重写覆盖。
  10. override 说明符(修饰成员函数)
    c++11新增,强制编译器检查该函数是否覆盖已存在的虚函数,如果没有覆盖则报错。
  11. 函数 try 语句块
    一般用在构造函数。构造函数在进入函数体之前先执行初始值列表,在初始值列表抛出异常时,构造函数内的try语句块无法生效。所以要想处理构造函数初始值抛出的异常,我们必须将构造函数写成函数try语句块。

Tags:

最近发表
标签列表