加上 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功能模板,如在升压提供的一个

T x;

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

由于static_castconst_cast之间的选择,static_cast肯定是可取:const_cast应只用于的抛弃的常量性,因为它是可以这样做的唯一的演员,和虚掷常量性是极其危险的。经由通过铸造远常量性获得的指针或引用修改对象可能会导致未定义的行为。

其他提示

我说static_cast优选,因为它仅允许用户从非constconst(这是安全的),而不是在另一个方向(其不一定是安全的)浇注。

这是一个很好的用例 隐式转换 函数模板。

您可以编写自己的投:

template<class T>
const T & MakeConst(const T & inValue)
{
    return inValue;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top