You’re probably familiar with const member functions such as:
class A { public: int get_x() const; // can't change A's state };
C++ also supports volatile member functions. You declare a member function with the volatile specifier to ensure that it can be called safely for a volatile object:
class B { int x; public: void f() volatile; // volatile member function }; int main() { volatile B b; // b is a volatile object b.f(); // call a volatile member function safely }
The object b is declared volatile. Calling a non-volatile member function from this object is unsafe, because b’s state might have been changed by a different thread in the meantime. To ensure that f() can be called safely for a volatile object, it’s declared volatile too.