我正在阅读有关易失性成员函数的内容,并发现成员函数可以同时是const 和 volatile 在一起。我没有得到这样的东西的真正用途。任何人都可以分享他们的经验吗实际使用将成员函数同时用作 const 和 volatile 。
我编写了小类来测试相同的内容:
class Temp
{
public:
Temp(int x) : X(x)
{
}
int getX() const volatile
{
return X;
}
int getBiggerX()
{
return X + 10;
}
private:
int X;
};
void test( const volatile Temp& aTemp)
{
int x = aTemp.getX();
}
int main(int argc, char* argv[])
{
const volatile Temp aTemp(10);
test(aTemp);
return 0;
}
The cv资格蒸馏意味着:
我不会改变这个值,但有一些东西可以改变。
您向自己承诺不会改变价值(const
资格)并要求编译器不要接触这个对象并关闭所有优化(volatile
资格)。不幸的是,编译器供应商在处理方面几乎没有标准volatile
相当。和volatile
is a hint毕竟对于编译器来说。
其实际用例是系统时钟。假设 0xDEADBEEF 是硬件时钟寄存器的系统特定地址,您可以写入:
int const volatile *c = reinterpret_cast<int *>(0xDEADBEEF);
您无法修改该寄存器值,但每次读取它时,它都可能具有不同的值。
另外,可以用它来建模UARTs http://en.wikipedia.org/wiki/16550_UART.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)