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++数据类型转换的相关函数的知识
- C++调用C库函数详细讲解
- 转自【北漂民工】C++文件读取操作的全部函数讲解fstream(ofstream/ifstream)
- 深入解析C++中的虚函数与多态
- C++深入理解(4)------函数模板以及显式具体化(读书笔记)
- 【Linux编程】C/C++获取目录下文件或目录及linux中fork()函数详解(原创!!实例讲解)
- 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数
- C++ 类 & 对象-类成员函数-类访问修饰符-C++ 友元函数-构造函数 & 析构函数-C++ 拷贝构造函数
- 深入理解c++成员函数
- C/C++学习笔记1 - 深入了解scanf()/getchar()和gets()等函数
- C++深入理解虚函数
- 深入学习C++中的函数概念
- c/C++ 函数参数返回值的深入理解
- C/C++学习笔记1 - 深入了解scanf()/getchar()和gets()等函数
- Kotlin中的高阶函数深入讲解
- c++中new和delete修饰符与malloc和free函数的区别
- C++ 虚函数经典深入解析 (good)
- 【转】【C/C++语言入门篇】-- 深入函数
- 深入理解C++中函数参数——传值与传址详解
- 【C/C++和指针】深入讲解位运算