易失性成员函数(C++)

Swi*_*tch 8 c++ multithreading volatile

鉴于以下课程:

class MyClass {
  public:
    int value() const {
      return value_;
    }

  private:
    volatile int value_;
};
Run Code Online (Sandbox Code Playgroud)

是否还必须将value()成员函数标记为volatile以避免被优化掉或者写得好吗?谢谢.

jal*_*alf 7

它完全类似于const工作原理.

如果您有一个const对象,则只有标记的成员函数const是可调用的.

所以...

如果您有一个volatile对象,则只有标记的成员函数volatile是可调用的.

只要对象本身不是volatile,函数是否正常就没有区别.

但是,请记住,volatile没有做多线程,它会不会帮你写线程安全的代码.对于任何与并发相关的东西,它都是错误的工具.


And*_*zos 4

value() 成员函数是否也必须标记为易失性以避免被优化,或者是否可以按照编写的那样?

将成员函数标记为 volatile 对于它是否被优化掉没有影响。正如所写的那样。

担心的是我是否有 MyClass c; 然后调用c.value(); 有几次,编译器可能认为 c.value() 将返回相同的值(即使它可能已经改变......)

听起来你想要的是了解原子变量。看一下 std::atomic。

如果你真的想了解 volatile,请阅读这篇论文:http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf