volatile关键字在C++中成员函数声明中的位置

Hat*_*ter 1 c++ multithreading volatile

"volatile"关键字在方法声明中的定位是否会影响其功能?

即,以下两段代码之间有什么区别吗?

一个.

class Test
{
public:
    volatile void testMe() 
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

B.

class Test
{
public:
    void testMe() volatile 
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

当成员函数具有返回值时也是如此.谢谢!

jua*_*nza 5

它与const限定符相同.

在第一个示例中,volatile适用于函数的返回值.在这种情况下它是无效的,所以它没有多大意义.事实上,按易变价值*返回没有多大意义.volatile参数只对参考有意义:

volatile int& foo() { ... }
volatile int& i = foo(); // OK
int j = foo(); // OK, use the volatile reference to construct a non volatile int
int& j = foo(); // Error!
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,这意味着,该方法是volatile,因此,它可以在(非const)非易失性调用类的易失性实例Test.volatile无法在volatile实例上调用没有限定符的类似方法.

Test test0;
test0.testMe(); // OK
volatile Test test1;
test1.testMe(); // OK
test1.someNonVolatileMethod(); // Error.
Run Code Online (Sandbox Code Playgroud)

*除非该值是指针