使用const_cast忽略volatile?

时间:2014-08-09 18:40:42

标签: c++ volatile const-cast

const_cast也可用于忽略对象为volatile的事实。但是,这究竟意味着什么?我想不出你会在const_cast变量上使用volatile的例子吗?

2 个答案:

答案 0 :(得分:1)

从不忽略变量为volatileconst之类的事实。

这样做会导致Undefined Behavior

const_cast允许的是,让编译器假设您投射的对象实际上不是合格的,即使您指的是指针/引用也是如此。
撒谎到编译器的代价一如既往地是UB。

一个常见的例子是定义一个具有限定和非限定成员函数的类来启用const / volatile-correctess,非限定版本是围绕完成所有工作的限定版本的内联包装。

volatile在低级驱动程序/微控制器代码之外很少见。

答案 1 :(得分:0)

如果变量已被声明为volatile(或者确实是const),那么使用const_cast删除它是未定义的行为,这是一个非常糟糕的主意。

但是你可能会遇到一个你知道不是真正的东西的易变(或常量)引用。在这种情况下,使用const_cast返回原始文件是合法的,偶尔也是有用的。

我偶尔用const做过这个,但我不记得曾经挥发过这样做过。买,然后我很少使用挥发性物质。