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

Position of volatile keyword in member function declaration in C++

本文关键字:声明 位置 函数 成员 C++ 易失性 关键字      更新时间:2023-10-16
'

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

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

一个。

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

二.

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

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

它与

const限定符相同。

在第一个示例中,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,因此可以在类Test的非常量和非易失性实例上调用它。无法在volatile实例上调用没有 volatile 限定符的类似方法。

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

*除非该值是指针

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

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

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

例如,如果您有:

volatile Test m;
m.testMe();

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