C++中的函数修饰符深入讲解

 更新时间:2019年02月06日 11:09:27   作者:tlanyan  
这篇文章主要给大家介绍了关于C++中函数修饰符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

C++博大精深,而且不断拥抱新的变化。本文简要总结一下C++中函数的修饰符,其中部分在实际中极少用到。

按修饰符的位置分为函数名前与函数名后两种,以下分别做介绍。

函数名前

1、返回值类型

返回值类型是C++中定义函数的必备部分,这些修饰符包括void,(unsigned) int,bool等内置基本数据类型和自定义类型,也包括修饰返回值const关键字(如const int*),还包括C++11中新增的类型自动推导auto关键字。

2、 template

template关键字声明函数是模板函数。

3、 virtual

virtual关键字声明函数是虚函数,可被子类覆盖。

4、 inline

inline关键字提示编译器应将函数内联。

5、 static

static修饰类的成员函数时指示函数是静态成员函数,不从属于具体对象;修饰单独的函数时,限定函数的可见范围为本文件内。

6、 extern

extern关键字声明一个定义在外部的函数

7、 explicit

explicit关键字在C++11新增,只用于构造函数,指定构造函数要显式定义,不能隐式转换。

8、 friend

friend关键字声明类的友元函数,在函数内可直接访问对象的私有或受保护成员及成员函数。

9、 constexpr

C++11中新增,指示函数返回常量表达式(可以简单理解为返回字面量)。

函数名后

置于函数名后的修饰符有两种,第一种使用等号(=),第二种直接修饰。

1、使用等号

此类较为简单,总共有三种:

=0:只能用于虚函数,表示函数为纯虚函数。

=default:C++11新增,只能用于编译器提供默认实现的特殊成员函数,指示使用默认实现。

=delete:C++11新增,只能用于编译器提供默认实现的特殊成员函数,指示编译器应该删除该函数的默认实现。

2、直接修饰

种类繁多,本人已知的修饰符包括:

const

表示函数不会修改对象(或者说调用期间对象不变),注意不包括mutable修饰的成员变量,可参考本人之前文章:C++中的mutable和volatile

volatile

类似于const修饰的函数,表示对象状态可能随时会改变;const修饰的函数内只能调用自身的const成员方法,同理volatile函数内也只能调用自身volatile成员函数。

&

C++11引入的功能,左值引用限定符,指示函数只能被左值对象调用。

&&

C++11引入,右值引用限定符,指示函数只能被右值调用。如果函数没有引用限定符修饰,左值和右值均可调用。一个引用限定例子:

 #include <iostream>
 struct S {
 void f() & { std::cout << "lvalue\n"; }
 void f() &&{ std::cout << "rvalue\n"; }
 };

 int main(){
 S s;
 s.f();   // 打印“ lvalue ”
 std::move(s).f(); // 打印“ rvalue ”
 S().f();   // 打印“ rvalue ”
 }

override

C++11引入的功能,声明成员函数覆盖父类的虚函数。声明为override后,子类声明时可不写virtual。

final

C++11引入,指示函数是最终实现,子类不应当再定义或覆盖,可与override同时使用。

noexcept

C++11引入,修饰函数是否会抛出异常。

throw

指示函数抛出异常及类型,C++11起被废弃。

总结

本文简要概括的列出了C++定义函数的修饰符。需要注意的是,严格来说上述内容中并不全是修饰符,部分仅是语法结构。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • C++中的opeartor new和placement new使用步骤

    C++中的opeartor new和placement new使用步骤

    这篇文章主要介绍了C++中的opeartor new和placement new详解,在很多情况下,placement new的使用方法和其他普通的new有所不同。这里提供了它的使用步骤,需要的朋友可以参考下
    2022-10-10
  • C++中 set的用法

    C++中 set的用法

    这篇文章主要介绍了C++中 set的用法,set的内部使用了红黑树对所有的元素进行了排序。在树结构当中,我们通常使用的都是<key, value>的形式。下面我们来看看该内容的具体情况,需要的朋友也可以参考一下
    2021-11-11
  • C++内嵌汇编示例详解

    C++内嵌汇编示例详解

    这篇文章主要介绍了C++内嵌汇编,本文的所有代码是在我自己的VS2008中测试的,由于环境的差别,不能保证能在所有的编译器上运行,需要的朋友可以参考下
    2022-01-01
  • VS2019中CMake项目的简单使用方法

    VS2019中CMake项目的简单使用方法

    这篇文章主要介绍了VS2019中CMake项目的简单使用方法,需要的朋友可以参考下
    2020-02-02
  • 初学C++之自定义类型名简化详解

    初学C++之自定义类型名简化详解

    下面小编就为就大家带来一篇初学C++之自定义类型名简化详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • include包含头文件的语句中,双引号和尖括号的区别(详解)

    include包含头文件的语句中,双引号和尖括号的区别(详解)

    下面小编就为大家带来一篇include包含头文件的语句中,双引号和尖括号的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • C++string字符串拼接遇到的问题及解决

    C++string字符串拼接遇到的问题及解决

    这篇文章主要介绍了C++string字符串拼接遇到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 使用c语言生成随机数的示例分享

    使用c语言生成随机数的示例分享

    在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,这篇文章主要介绍了使用c语言生成随机数的示例,需要的朋友可以参考下
    2014-03-03
  • 手把手教你如何一眼分辨是C还是C++

    手把手教你如何一眼分辨是C还是C++

    在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序,下面这篇文章主要给大家介绍了关于如何一眼分辨是C还是C++的相关资料,需要的朋友可以参考下
    2023-02-02
  • C语言的冒泡排序和快速排序算法使用实例

    C语言的冒泡排序和快速排序算法使用实例

    这篇文章主要介绍了C语言的冒泡排序和快速排序算法使用实例,示例题目也是ACM练习当中的基础习题,需要的朋友可以参考下
    2015-08-08

最新评论