给出以下代码:
struct Foo {
volatile int i;
};
const int& bar = foo.i;
我得到:
error: invalid initialization of reference of type 'const int&' from expression of type 'volatile int'
除非我提供一个static_cast<volatile int>
。
C ++中类型的“波动性”的工作方式与“ const-ness”几乎完全相同,也就是说,volatile
无法将对象分配给非volatile
引用,其方式与
const int i = 3;
int& j = i; // won't work
同样,只能volatile
在volatile对象上调用标记的方法:
struct S
{
void do_something() volatile {}
void do_something_else() {}
};
volatile S s;
s.do_something(); // fine
s.do_something_else(); // won't work
方法可以被“挥发性”所重载,就像它们可以被恒定性所重载一样。
在C ++ standardese中,这些东西称为cv-qualifiers,以强调它们以完全相同的方式工作。(C99添加了第三种以相同的方式工作,restrict
在某些C ++编译器中可用作扩展)。您可以使用更改简历限定词const_cast<>
-static_cast<>
不需要更强大的功能。
编辑:
为了明确起见,一个类型可以同时具有const
和volatile
修饰符,总共有四种可能性:
int i;
const int j;
volatile int k;
const volatile int l;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句