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