要将const添加到非const对象,这是首选方法? const_cast<T>static_cast<T>。在最近的问题中,有人提到他们更喜欢使用static_cast,但是我本以为const_cast可以使代码的意图更加明确。那么使用static_cast生成变量const的参数是什么?

最佳答案

都不使用。初始化引用该对象的const引用:

T x;
const T& xref(x);

x.f();     // calls non-const overload
xref.f();  // calls const overload

或者,使用implicit_cast函数模板,例如the one provided in Boost:
T x;

x.f();                           // calls non-const overload
implicit_cast<const T&>(x).f();  // calls const overload

给定static_castconst_cast之间的选择,static_cast绝对是更可取的:const_cast仅应用于丢弃constness,因为它是唯一可以这样做的强制转换,并且丢弃constness本质上很危险。通过删除常量来获得的指针或引用来修改对象可能导致不确定的行为。

07-28 01:26