const_cast 与 static_cast
-
25-09-2019 - |
题
加上 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_cast
和const_cast
之间的选择,static_cast
肯定是可取:const_cast
应只用于的抛弃的常量性,因为它是可以这样做的唯一的演员,和虚掷常量性是极其危险的。经由通过铸造远常量性获得的指针或引用修改对象可能会导致未定义的行为。
其他提示
我说static_cast
优选,因为它仅允许用户从非const
到const
(这是安全的),而不是在另一个方向(其不一定是安全的)浇注。
这是一个很好的用例 隐式转换 函数模板。
您可以编写自己的投:
template<class T>
const T & MakeConst(const T & inValue)
{
return inValue;
}
不隶属于 StackOverflow