• C++中的mutable,volatile,explicit关键字


    1、mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。
    在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
    我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。


    2,volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。volatile的本意是“易变的”,不过翻译成“直接存取原始内存地址”更为合适。“易变”是因为外在因素引起的,象多线程,中断等,并不是因为用volatile修饰了的变量就是“易变”了,假如没有外因,即使用volatile定义,它也不会变化。一般说来,volatile用在如下的几个地方:

    1. 中断服务程序中修改的供其它程序检测的变量需要加volatile;
    2. 多任务环境下各任务间共享的标志应该加volatile;
    3. 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。
    4. 另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。


    3、在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。

    explicit使用注意事项:

        *explicit 关键字只能用于类内部的构造函数声明上。

        *explicit 关键字作用于单个参数构造函数

        *在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换


  • 相关阅读:
    [OpenCV]基于arm64和Python2、Python3的opencv-python-contrib编译
    [Jupyter_Notebook]Windows下Jupyter-Notebook更换默认目录
    【Vmware】NAT模式下网络无法连接
    COCO数据集转mask
    [COCO数据集]关于instances中的分割信息按部分类别进行获取及保存
    Leetcode147-对链表进行插入排序(Python3实现)
    Leetcode1415-长度为 n 的开心字符串中字典序第 k 小的字符串(Python3实现)
    Leetcode1353-最多可以参加的会议数目(Python3实现)
    RabbitMQ 官方NET教程(六)【RPC】
    RabbitMQ 官方NET教程(五)【Topic】
  • 原文地址:https://www.cnblogs.com/zcwsmile/p/4027835.html
Copyright © 2020-2023  润新知