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

时间:2012-05-24 07:14:44

标签: c++ multithreading volatile

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

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

一个。

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

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

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

2 个答案:

答案 0 :(得分: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!

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

volatile

* 除非该值是指针

答案 1 :(得分:3)

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

返回void(而不是返回)时,volatile在第一个代码段中无用。

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

例如,如果你有:

volatile Test m;
m.testMe();

仅编译testMe被标记为volatile(就像您的第二个代码一样)。