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() void f() &};

 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++定义函数的修饰符。需要注意的是,严格来说上述内容中并不全是修饰符,部分仅是语法结构。

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

(0)

相关推荐

  • 简单总结C++中的修饰符类型

    C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed unsigned long short 修饰符 signed.unsigned.long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型. 修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀.例如:unsigned

  • c++中的static修饰符示例详解

    前言 本文主要给大家介绍了关于c++中static修饰符的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 下面一段是引用自effective c++ 中的一句话: 所谓的static对象,其寿命是从构造出来到程序结束为止(以下文章不再赘诉).因此stack和heap-base对象都被排除.这种对象包括global对象,定义于namespace作用域内的对象,在classes内,在函数内,以及在file作用域内被声明为static的对象. 所以static在c++中可以

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

    前言 C++博大精深,而且不断拥抱新的变化.本文简要总结一下C++中函数的修饰符,其中部分在实际中极少用到. 按修饰符的位置分为函数名前与函数名后两种,以下分别做介绍. 函数名前 1.返回值类型 返回值类型是C++中定义函数的必备部分,这些修饰符包括void,(unsigned) int,bool等内置基本数据类型和自定义类型,也包括修饰返回值const关键字(如const int*),还包括C++11中新增的类型自动推导auto关键字. 2. template template关键字声明函数是

  • vue中的事件修饰符once,prevent,stop,capture,self,passive

    目录 vue中的事件修饰符 1. once 2. prevent 3. stop 4. capture和self 5. passive与prevent相反 vue事件处理(修饰符) 事件修饰符 按键修饰符 系统修饰键 鼠标按钮修饰符 vue中的事件修饰符 1. once 只执行一次 <div v-on:click.once='alert("1")'></div> 只有在第一次点击时会执行,再次点击不会起作用 2. prevent 阻止默认程序,比如form表单中

  • 浅谈php中的访问修饰符private、protected、public的作用范围

    1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时,子类中的 访问修饰符的范围要大于等于 父类的[ 继承只能发扬光大,至少保持不变.不可以丢失东西.] 以上这篇浅谈php中的访问修饰符private.protected.public的作用范围就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python函数修饰符@的使用方法解析

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个新函数 (4)修饰符维护被维护函数的签名 例子1:被修饰函数不带参数 def log(func): def wrapper(): print('log开始 ...') func() print('log结束 ...') return wrapper @log def test(): print('t

  • java中的各种修饰符作用及范围

    目录 访问修饰符 作用范围 静态修饰符的特点 静态使用的注意事项 静态的优缺点 当成员变量被静态修饰后,和非静态成员变量的区别 访问修饰符 private 缺省 protected public 作用范围 访问修饰符\作用范围 所在类 同一包内其他类 其他包内子类 其他包内非子类 private 可以访问 不可以 不可以 不可以 缺省 可以 可以 不可以 不可以 protected 可以 可以 可以 不可以 public 可以 可以 可以 可以 private 被private修饰的属性和方法,

  • 聊聊Java中的Native修饰符

    目录 Native修饰符的使用 native主要用于方法上 说明 举例 Native修饰的方法到底有什么用处 什么是NativeMethod 为什么要使用NativeMethod JVM怎样使NativeMethod跑起来 Native修饰符的使用 native主要用于方法上 1.一个native方法就是一个Java调用非Java代码的接口.一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现. 2.在定义一个native方法时,并不提供实现体(比较像定义一个Java

  • vue中的.sync修饰符用法及原理分析

    目录 .sync修饰符用法及原理 例如 .sync修饰符的用法总结 需求描述 解决方案 .sync修饰符用法及原理 vue中我们经常会用v-bind(缩写为:)给子组件传入参数. 或者我们会给子组件传入一个函数,子组件通过调用传入的函数来改变父组件的状态. 例如 //父组件给子组件传入一个函数  <MyFooter :age="age" @setAge="(res)=> age = res">  </MyFooter>  //子组件通过

  • vue5中的事件修饰符(style)和template

    目录 事件修饰符 按键修饰符 自定义按键修饰符别名 template 组件 组件注册 Vue 调试工具 组件插槽 事件修饰符 在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求. Vue 不推荐我们操作DOM 为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符 修饰符是由点开头的指令后缀来表示的 <!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doT

  • Java中的访问修饰符详细解析

    1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 public : Java 语言中类的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类作为公共工具供其它类和程序使用的应定义为 public 类. 2 )抽象类修饰符 abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类.所谓抽象类

随机推荐