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

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

即以下两段代码是否有区别?

一个。

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

B.

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

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

0
额外
意见: 1

2 答案

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

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

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

例如,如果你有:

volatile Test m;
m.testMe();

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

0
额外

它与 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的(非const)非易失性易失性实例上调用它。 </代码>。没有 volatile 限定符的类似方法无法在 volatile 实例上调用。

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

*Unless that value is a pointer

0
额外
通过值返回一个易失类的类型也是有意义的,这样在临时只能调用volatile成员函数。我不是说我见过这个,但看起来似乎合理。
额外 作者 edA-qa mort-ora-y,
@ edA-qamort-ora-y我必须认真思考那个问题。我想你已经确定了一个不同于 const 的情况,其中一个 const 返回值会扰乱语义。
额外 作者 juanchopanza,