1

方法声明中 'volatile' 关键字的位置会影响其功能吗?

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

一种。

class Test
{
public:
    volatile void testMe() 
    {
    }
};

B.

class Test
{
public:
    void testMe() volatile 
    {
    }
};

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

4

2 回答 2

5

这与const预选赛相同。

在第一个示例中,volatile应用于函数的返回值。在这种情况下它是无效的,所以它没有多大意义。实际上,通过 volatile value *返回并没有多大意义。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!

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

Test test0;
test0.testMe(); // OK
volatile Test test1;
test1.testMe(); // OK
test1.someNonVolatileMethod(); // Error.

*除非该值是一个指针

于 2012-05-24T07:18:55.813 回答
3

适用于的相同规则const适用于volatile.

返回时void(而不是返回),volatile在第一个片段中是没用的。

第二个片段将整个方法标记为volatile.

例如,如果您有:

volatile Test m;
m.testMe();

只有 compiles 被testMe标记为volatile(就像你的第二个代码一样)。

于 2012-05-24T07:17:08.250 回答