const_cast
也可以用来忽略对象是 的事实volatile
。但是,这实际上意味着什么?我想不出一个你会const_cast
在volatile
变量上使用 a 的例子?
问问题
488 次
2 回答
2
永远不要volatile
忽略变量是const
或类似的事实。
这样做会导致未定义的行为。
const_cast
但是,允许编译器假设您强制转换的对象实际上不是这样限定的,即使您拥有的指针/引用是这样说的。
一如既往,对编译器撒谎的惩罚是 UB。
一个常见的例子是定义一个具有限定和非限定成员函数的类以启用 const/volatile-correctess,非限定版本是完成所有工作的限定版本的内联包装器。
volatile
虽然在低级驱动程序/微控制器代码之外非常罕见。
于 2014-08-09T18:47:19.467 回答
0
如果一个变量已被声明为 volatile(或者,实际上是 const),那么使用const_cast
来删除它是未定义的行为,并且是一个非常糟糕的主意。
但是,您可能会得到一个 volatile(或 const)对您知道不是真的东西的引用。在这种情况下,它是合法的,并且偶尔有用,用于const_cast
恢复原始状态。
我偶尔会用 const 来做这件事,但我不记得曾经用 volatile 做过。然后购买,反正我很少使用 volatile。
于 2014-08-09T18:53:28.257 回答