方法声明中'volatile'关键字的定位是否会影响其功能?
即,以下两段代码之间有什么区别吗?
一个。
class Test
{
public:
volatile void testMe()
{
}
};
乙
class Test
{
public:
void testMe() volatile
{
}
};
当成员函数具有返回值时也是如此。谢谢!
答案 0 :(得分:5)
与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
,因此可以调用类{{1}的(非常量)非易失性和易失性实例}。无法在Test
实例上调用没有volatile
限定符的类似方法。
volatile
* 除非该值是指针
答案 1 :(得分:3)
适用于const
的相同规则适用于volatile
。
返回void
(而不是返回)时,volatile
在第一个代码段中无用。
第二个片段将整个方法标记为volatile
。
例如,如果你有:
volatile Test m;
m.testMe();
仅编译testMe
被标记为volatile
(就像您的第二个代码一样)。