volatile函数与C ++中的常量成员函数

时间:2013-12-06 08:51:54

标签: c++ const volatile

很多人都说 “volatile成员函数完全类似于const的工作方式。”

它们非常相似,如果指针被标记为const / volatile,它只能访问标记为const / volatile的成员函数。

但实际上将成员函数定义为const会产生额外的影响,这会使函数成为只读。对函数内部对象的任何修改都将导致编译器错误。在volatile成员函数中是否有这样的类比?

3 个答案:

答案 0 :(得分:3)

好吧,volatile成员函数会使对象成员变为volatile,即this就像定义volatile T * const this一样。因此,对成员变量的任何引用也都是不稳定的。

请记住,易失性读/写是编译器无法省略/重新排序的操作。它们通常用于实现内存映射的硬件设备或类似的东西。

坦率地说,我从来没有使用过这个功能,只是通过巧妙的技巧来过滤对函数的访问,而不是利用对象的易失性。如果你的代码足够低,需要volatile,你可能会想要将volatile放在你需要的变量中。

答案 1 :(得分:0)

简答:是的。

如果一个对象的实例被声明为volatile,则在其上调用非易失性方法是错误的(或者那些方法调用其他非易失性方法)。

非易失性实例仍然可以调用volatile方法,但并不是说在类中有两个相同的方法是完全合法的 - 一个是volatile,一个不是。在这种情况下,非易失性实例将调用该方法的非易失性版本。

答案 2 :(得分:0)

  
    

但实际上将成员函数定义为const会产生额外的影响,这会使函数成为只读函数。

  

这有点误解。它不会使成员函数成为只读 - 它会使*this const。两者之间有一个小但重要的区别(成员函数仍然可以修改mutable成员,如果它想要讨厌,它可以抛弃const - *this修改它想要的任何东西,编译器不会抱怨)。

volatile成员函数的工作方式完全相同 - 它会*this volatile

相关问题