方法声明中 'volatile' 关键字的位置会影响其功能吗?
即,以下两段代码之间有什么区别吗?
一种。
class Test
{
public:
volatile void testMe()
{
}
};
B.
class Test
{
public:
void testMe() volatile
{
}
};
当成员函数有返回值时也是如此。谢谢!
方法声明中 'volatile' 关键字的位置会影响其功能吗?
即,以下两段代码之间有什么区别吗?
一种。
class Test
{
public:
volatile void testMe()
{
}
};
B.
class Test
{
public:
void testMe() volatile
{
}
};
当成员函数有返回值时也是如此。谢谢!
这与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,因此可以在类的(非常量)非易失性和易失性实例上调用它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();
只有 compiles 被testMe标记为volatile(就像你的第二个代码一样)。