关键字 mutable、volatile 的作用

来源:互联网 发布:羊毛毡仿真小猫咪淘宝 编辑:程序博客网 时间:2024/05/21 19:23

 来源:http://www.cnblogs.com/cheney23reg/archive/2010/08/13/1799279.html 

有些小错误,不影响阅读,程序例子没验证。

1.mutable 关键字 (C++)

 

字典意思

adj. 易变的,不定的;性情不定的

 

语法意思

如果需要在const成员方法中修改一个成员变量的值,那么需要将这个成员变量修饰为mutable。即用mutable修饰的成员变量不受const成员方法的限制。

 

可以认为mutable的变量是类的辅助状态,但是只是起到类的一些方面表述的功能,修改他的内容我们可以认为对象的状态本身并没有改变的。

实际上由于const_cast的存在,这个概念很多时候用处不是很到了。

 

 

2.volatile (C/C++)

 

字典意思

adj. 爆炸性的;不稳定的;挥发性的;反覆无常的

n. 挥发物;有翅的动物

 

语法意思

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

 

下面是volatile变量的几个例子:
    1). 并行设备的硬件寄存器(如:状态寄存器)
    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
    3). 多线程应用中被几个任务共享的变量

回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。


假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 
    1). 一个参数既可以是const还可以是volatile吗?解释为什么。
    2). 一个指针可以是volatile 吗?解释为什么。
    3). 下面的函数有什么错误: 

原创粉丝点击