zoukankan      html  css  js  c++  java
  • 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关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换


  • 相关阅读:
    算法之顺序、二分、hash查找
    基本数据结构-顺序表和链表!!!
    Deque的应用案例-回文检查
    基本数据结构-双端队列(Deque)
    队列的应用案例-烫手的山芋
    基本数据结构-队列
    基本数据结构-栈
    python中列表,字典,字符串常用操作
    flask中request请求中各种传参
    HTTP请求向服务器传参方式
  • 原文地址:https://www.cnblogs.com/zcwsmile/p/4027835.html
Copyright © 2011-2022 走看看