繁体   English   中英

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

[英]Position of volatile keyword in member function declaration in C++

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

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

一种。

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

B.

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

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

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的,因此它可以在(非const)类的非易失性和易失性实例调用Test 没有volatile限定符的类似方法无法在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 (如第二个代码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM