方法声明中 '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
(就像你的第二个代码一样)。